1

使用時

<%= 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 { })%>

この解決策はあまり好きではありません+部分ビューでリストを作成できることは知っていますが、これも醜い
です。これに対する別の解決策はありますか?

4

1 に答える 1

1

これが MVC のバグであることを発見しました。回避策はありますが、修正されていません。自分で回答した質問を参照してください(投稿を見つける前に同じ問題がありました)。

リスト内の MVC4 バインディング ドロップダウン リスト (バグ)

よろしく
クレイグ

于 2013-02-19T11:54:07.063 に答える