2015-12-31 52 views
3

我是新來的MVC 4, 我想要做的是,讓在CSHTML頁爲什麼不對@ Html.LabelFor值進行修改?

@Html.LabelFor(m => m.Increment, Model.Increment) 

在控制器頁

public ActionResult Index(IncrementModel IM){ 
    IM.Increment ++; 
    return View(IM); 
} 

起始顯示增量整數

標籤結果是0,按下一個它增加到1,那麼永遠的值是1,不管我按了多少次。

回答

1

LabelFor輔助方法渲染一個這樣的標籤。

<label for="Increment">Increment</label> 

這不會顯示您的遞增屬性的值。如果你想,你可以簡單地使它像

<p>@Model.Increment</p> 

或者使用DisplayFor() helper方法。

@Html.DisplayFor(s=>s.Increment) 

這也將簡單地將值呈現給您的頁面。發佈表單時,它不會將頁面中的當前值發佈到HttpPost操作。爲此你需要一個表單域。它可以是一個文本框,隱藏域等。

@using(Html.BeginForm()) 
{ 
    @Html.DisplayFor(s=>s.Increment) 
    @Html.HiddenFor(s => s.Increment) 
    <input type="submit"/> 
} 

但現在還當您發佈的值和操作方法增加它,併發送回,輸入的字段(隱藏字段)的值不會每次都用新值更新。因爲ModelStateDictionary現在對此屬性有一些值,這是第一次更新後的值。當我們爲Increment屬性渲染隱藏字段時,將使用此值。這就是你看到1作爲價值的原因,它從不改變。

你應該做的是明確地從ModelStateDictionary中刪除這個項目。

[HttpPost] 
public ActionResult Index(IncrementModel IM) 
{ 
    IM.Increment++; 
    ModelState.Remove("Increment"); 
    return View(IM); 
} 
+0

我會嘗試它,希望它的工作 –

+0

不能,價值並沒有ModalState保存 –

+1

我只是在一個簡單的MVC示例項目中驗證它,它完全工作。我相信你錯過了我發佈的內容。請仔細檢查。 – Shyju

0

標籤只用於顯示。它的價值不提交回服務器。改爲使用文本框並將其放置在表單中。

@Html.TextBoxFor(m => m.Increment); 
+0

如果我可以建議增加將提交的,而不是文本框隱藏的變量,這是我會怎麼做 – simsim

相關問題