[英]Default values for model fields in ASP.Net MVC3
我的控制器中有一個簡單的動作:
public ActionResult Edit(int itemId)
{
return View(new EditModel() { ItemId = itemId + 1 });
}
public class EditModel
{
public int ItemId { get; set; }
public string Title { get; set; }
}
當我嘗試顯示所有內容時,問題出現在View中。
Model.ItemId: @Model.ItemId
@Html.EditorForModel()
由於EditModel上的action參數和屬性具有相同的名稱( itemId
),因此我得到以下內容:
這是正確的行為嗎? 在這種情況下,如何更改表單中顯示的默認值?
對於第一次看,這可能會有點混亂,但是,這是默認(正確)行為。 當您使用EditorFor
或類似的編輯器助手時, Controller.ModelState是值的特權供應商,而不是模型本身。 但是你的情況更棘手。
ModelState填充了參與模型綁定的操作參數和值。 當您調用該操作時, ModelState
將填充"ItemId" = action parameter(itemId) value
。 后來, EditorFor
看到應該為ItemId
繪制編輯器。 由於ModelState已經有ItemId
,它不會查看模型值,而是從ModelState["ItemId"]
提取它。 錯誤的棘手來源是操作參數名稱與模型屬性名稱匹配,而modelState優先於模型值。 最好的解決方案(干凈的)只是重命名動作參數,因此它與模型屬性名稱不匹配。
public ActionResult Edit(int initialItemId)
{
return View(new EditModel() { itemId = initialItemId + 1 });
}
這樣就可以了。
你可以寫
Model.ItemId: @Model.ItemId
@Html.EditorFor(x => x.Title)
或隱藏ItemId以使用元數據進行編輯
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.