如果您將ViewData中的鍵的名稱與視圖上的表單字段的名稱相匹配,HtmlHelpers被設計爲隱式地從ViewData中取出,基於那把鑰匙。我建議改變你的視圖代碼:
<%= Html.DropDownList("myList") %>
的HtmlHelpers似乎以這種方式使用的時候效果最好(雖然這並不總是可能的)。
更新:
擴大後爲什麼這似乎而其他方法不,我一頭扎進了SelectExtensions.cs代碼工作的原因...
但是你打電話的DropDownList ,私有方法SelectInternal最終呈現實際的HTML。對於SelectInternal簽名是這樣的:
SelectInternal(string optionLabel, string name, IEnumerable<SelectListItem> selectList, bool usedViewData, bool allowMultiple, IDictionary<string,object> htmlAttributes)
下面是DropDownList中的兩種用法採取的路徑:
的DropDownList( 「myList中」)
DropDownList(string name) ->
SelectInternal(null, name, htmlHelper.GetSelectData(name), true, false, null)
的DropDownList( 「myItem」 ,(SelectList)ViewData [「myList」]) DropDown
List(string name, IEnumerable<SelectListItem> selectList) ->
DropDownList(name, selectList, null /* object, htmlAttributes */) ->
DropDownList(name, selectList, new RouteValueDictionary(htmlAttributes)) ->
SelectInternal(null, name, selectList, false, false, htmlAttributes)
因此,在這一天結束的時候,這兩個路徑之間的區別在於工作方式通過真正到SelectInternal的usedViewData參數,而不能上班的路上經過假。
這很可能,我認爲有一個bug某處內SelectInternal時usedViewData是假。
這仍然是我與MVC 1.0面臨的問題 – 2009-06-11 02:48:15