1
我有我修剪在視圖模型的setter服務器端的價值,並覈實該修剪值存在一個文本框:ASP.NET MVC 3 HtmlHelper.Textbox使用ModelState作爲值的來源?
<Required()>
Public Property Name As String
Get
Return Me.mName
End Get
Set(value As String)
Me.mName = value.Trim()
End Set
End Property
在控制器中,我檢查,看看是否的ModelState是無效的,如果是,我再次顯示該視圖:
If (Not ModelState.IsValid) Then
Return View("Locations", viewModel)
End If
在修剪值爲空的情況下,我將該表單重新顯示給用戶。此時,未修剪的值將被放入文本框中。我更喜歡修剪的價值。
我正在查看MVC源代碼,發現InputHelper函數中的某一點(由位於InputExtensions.cs中的Html.Textbox()使用)代碼檢查ModelState的值,如果它存在,取代了控制器提供的價值。
string attemptedValue = (string)htmlHelper.GetModelStateValue(name, typeof(string));
tagBuilder.MergeAttribute("value", attemptedValue ?? ((useViewData) ? htmlHelper.EvalString(name) : valueParameter), isExplicitValue);
我意識到,我可以在控制器清除的ModelState解決這個問題,但我只是想知道,爲什麼MVC開發者選擇在該ModelState中值取代視圖模型值。
這是一個設計決定,只有ASP.NET MVC開發人員/架構師可以回答(因爲他們是設計您所問的框架的人)。 SO不是問這些問題的正確的地方。請直接向您使用的軟件的編輯(您的情況是Microsoft)編輯。 –
我並沒有詢問代碼的設計。我正在詢問MVC團隊有意實施的特定功能。我想知道這個對應的MVC的具體功能。 –
你問爲什麼Html幫助者在綁定它們的值時首先查看ModelState,然後在視圖模型值處查看,並且這個問題的答案是(正如你已經通過查看源代碼已經發現的那樣):* by design *。設計者設計這種框架的原因可以由框架設計者自己最好地回答。 –