Wenn Sie:
<%= Html.DropDownList("NAME_OF_ITEM_ID_PROPERTY", (SelectList)ViewData["myList"]) %>
Also für Ihr Beispiel, das wahrscheinlich wäre Wenn Sie den Namen des Schlüssels in ViewData mit dem Namen des Formularfelds in der Ansicht verknüpfen, werden die HtmlHelper implizit aus den ViewData-Daten abgeleitet dieser Schlüssel. Ich würde vorschlagen, Ihre Ansicht Code ändern zu:
<%= Html.DropDownList("myList") %>
Die HtmlHelpers scheinen zu funktionieren am besten, wenn sie auf diese Weise mit (obwohl das nicht immer möglich ist).
Update:
auf den Grund zu erweitern, warum dies, während die anderen Methoden zu arbeiten, scheint nicht, ich in den Code für SelectExtensions.cs Taube ...
auch immer Sie nennen Dropdownlist , die private Methode SelectInternal ist, was schließlich das tatsächliche HTML rendert. Die Signatur für SelectInternal wie folgt aussieht:
SelectInternal(string optionLabel, string name, IEnumerable<SelectListItem> selectList, bool usedViewData, bool allowMultiple, IDictionary<string,object> htmlAttributes)
Hier ist der Weg, die beiden Verwendungen von Dropdownlist nehmen:
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)
So am Ende des Tages, der Unterschied zwischen den beiden Pfaden ist, dass die Art und Weise, die usedViewData Parameter wahr in SelectInternal Ausweise arbeitet, während die Art und Weise, die nicht passiert falsch funktioniert.
Es scheint mir wahrscheinlich, dass es ein Fehler irgendwo in SelectInternal ist, wenn usedViewDatafalsch ist.
Dies ist immer noch ein Problem, das ich mit MVC 1.0 konfrontiert –