6

在我使用this overloadHtmlHelper.TextBox的觀點:HtmlHelper.TextBox使用模型值,即使明確的價值提供

public static MvcHtmlString TextBox(
    this HtmlHelper htmlHelper, 
    string name, 
    Object value 
) 

的文檔狀態:

類型:System.Object

文本輸入元素的值。 如果此值爲null,則元素的值將從ViewDataDictionary對象中檢索。如果這裏沒有值,則從ModelStateDictionary對象中檢索該值。

我確實提供了value當我把這個過載,而這個值不爲空。儘管如此,文本框的值只要存在於ModelStateDictionary中即可從中檢索。

爲了強制文本框使用內聯提供的值,我必須首先在控制器中重置模型(或從鍵集合中刪除帶有文本框名稱的鍵)。

同樣適用於由HtmlHelper提供的其他控件。

我的理解錯在哪裏?或者是文檔中的錯誤?

回答

2

ModelState屬性始終優先於所有輸入傭工,而不僅僅是TextBox。這允許您在視圖中指定默認值,並在POST呈現已發佈值(取自ModelState)之後,而無需手動將已發佈值傳遞給視圖。要使用不同的值,您必須從ModelState中刪除條目。

+0

是的,這是我觀察到的,但沒有記錄發生。因此,這個問題。 – GSerg

+2

@GSerg文檔不正確。 –

1

這就是模型綁定器的工作方式,它從模型狀態獲取值,可能保留失敗的回發或驗證失敗的值。您是否嘗試過使用HTML屬性設置的值

Html.TextBox("Id", new { Value = Model.Id}) 

+1

是的,我知道模型綁定是如何工作的。對我來說,它似乎很奇怪,它顯然不是如何工作的。 – GSerg

-1

也許這會有所幫助。

下面財產和計算機[「textboxvalue」]

public string Id { get; set; } 

如果您已經提供了可以綁定到「值」參數的對象使用視圖模型,在該HTML輔助總是會使用它的值。

勢必查看模式 - 文本框的值 - 這表明,該模型的id

@Html.TextBox("Id", Model.Id) 

從視圖提供的數據值 - 文本框 - 這些顯示視圖數據的價值

@Html.TextBox("Id", ViewData["textboxvalue"]) 

即使提供的名稱與屬性名稱不同,該值仍將爲型號提供的值

- 文本框值綁定到查看模型 - 這些顯示模型的ID

​​

從視圖提供的數據值 - 文本框 - 這些顯示視圖數據的價值

@Html.TextBox("Id2", ViewData["textboxvalue"]) 

如果您提供自定義的

與提供的硬編碼值 - 文本框 - 這個節目視圖中提供的字符串

@Html.TextBox("Id", "my hardcoded value in view") 

該文檔說明 - 如果您不填充「值」參數,如下面的:

@Html.TextBox("Id", null) 

然後MVC框架會自動嘗試和搜索都綁定到視圖和數據字典中的模型。

如果你有這樣的情況,那麼

-Found在一個視圖模型稱爲「ID」屬性。文本框的值設置爲模型值

@Html.TextBox("Id", null) 

但如果「名稱」值不在模型/字典屬性/鍵,然後框架找不到任何值,因此文本框的值將是一個空字符串

與名稱 - 文本框,是不是在視圖模型或視圖中的數據

@Html.TextBox("Id2", null) 
+0

對不起,您是否看過我的問題? – GSerg