使用時
<%= Html.DropDownListFor(model => model.FeeTypeId, Model.GetFeeTypes(), new { })%>
この場合、選択がレンダリングされるときに Model.FeeTypeId に従って適切なオプションが選択されます。
ただし、部分ビューを使用してフォームをレンダリングする場合は、特定のHtmlFieldPrefix
を渡します (たとえば、2 つの同一のビューをレンダリングし、要素に異なる ID が必要な場合に必要になります)。
<% Html.RenderPartial("path-to-partial-view", Model, new ViewDataDictionary() { TemplateInfo = new TemplateInfo() { HtmlFieldPrefix = "myPrefix" } }); %>
値は選択されません。
値を選択していない EditorTemplate の DropDownListForの問題に似ていますが、原因は異なります。
MVC 3ソースを調べた
ところ、接頭辞が含まれている場合にフルネームで値を取得できないSelectInternal
メソッドに問題があるよう
です.TextBoxForは式の値をInputHelperに渡すので失敗しません. ViewData.Eval を使用することはできませんhtmlHelper.ViewData.Eval(fullName);
念のため、部分ビューでテストしてください。
部分ビューでは、次のように出力されます "myPrefix.FeeTypeId"
<%= Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("FeeTypeId") %>
そして、以下が印刷されます"by property name: [value] by full name: [empty string]"
<%="by property name: " + Html.ViewData.Eval("FeeTypeId")%><br />
<%= "by full name: " + Html.ViewData.Eval(Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("FeeTypeId"))%>
私が見つけた唯一の解決策は、Model.GetFeeTypes() でリストを生成し、必要なオプションを選択済みとしてマークすることです。
<%= Html.DropDownListFor(model => model.FeeTypeId, Model.GetFeeTypes(Model.FeeTypeId), new { })%>
この解決策はあまり好きではありません+部分ビューでリストを作成できることは知っていますが、これも醜い
です。これに対する別の解決策はありますか?