私はASP.NET MVC 3を使用していて、ちょうどDropDownListFor
HTMLヘルパーを使用して「gotcha」を実行しました。ASP.NET MVC DropDownListForモデルから値を選択しない
私は私のコントローラでこれを実行します。
ViewBag.ShippingTypes = this.SelectListDataRepository.GetShippingTypes();
そしてGetShippingTypes
方法:
public SelectList GetShippingTypes()
{
List<ShippingTypeDto> shippingTypes = this._orderService.GetShippingTypes();
return new SelectList(shippingTypes, "Id", "Name");
}
私はViewBag
にしていないモデルでそれを置く理由(私は強く型付けされているモデルのために各ビュー)、私はEditorTemplateを使用してレンダリングするアイテムのコレクションを持っています。これはShippingTypesの選択リストにもアクセスする必要があります。
それ以外の場合は、コレクション全体をループして、ShippingTypesプロパティを割り当てる必要があります。
これまでのところとても良いです。私の見解では
、私はこれを行う:
@Html.DropDownListFor(m => m.RequiredShippingTypeId, ViewBag.ShippingTypes as SelectList)
RequiredShippingTypeId
の値がドロップダウンで選択しないであること、である何が起こる
(RequiredShippingTypeId
はタイプInt32
です)。
彼は、選択リストがViewData
からあるときMVCは、ViewData
から選択した値をルックアップすることを示唆しています。ブログの投稿が古くて、MVC 1ベータについて話しているので、これはもうわかりません。
この問題を解決し、回避策はこれです:選択されていませんアイテム:
@Html.DropDownListFor(m => m.RequiredShippingTypeId, new SelectList(ViewBag.ShippingTypes as IEnumerable<SelectListItem>, "Value", "Text", Model.RequiredShippingTypeId.ToString()))
は私が私の前と同じ動作を与える終わり、でRequiredShippingTypeId
にToString
ないようにしました。
私はこれがデータ型の問題だと思っています。最終的には、HTMLヘルパーは文字列(選択リスト内)をInt32
(RequiredShippingTypeId
)と比較しています。
しかしViewBag
でSelectListのを入れたときに、なぜそれが機能しない - モデルに追加し、ビュー内にこれをやったときに、それは完璧に動作したとき:
@Html.DropDownListFor(m => m.Product.RequiredShippingTypeId, Model.ShippingTypes)
ありがとう!それで、魔法は "単純な"ラムダ式でしか動作しないことが分かり、システムは警告を出さない。 –