簡體   English   中英

ASP.Net MVC3中模型字段的默認值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM