使用ASP.Net MVC 3 - DropDownListFor未能選擇如果HtmlFieldPrefix被設定在局部視圖中的值形成模型
<%= Html.DropDownListFor(model => model.FeeTypeId, Model.GetFeeTypes(), new { })%>
在這種情況下
右選項被選擇時,根據Model.FeeTypeId當選擇被渲染。
BUT
如果使用的局部視圖,通過它的特定HtmlFieldPrefix呈現形式(你將需要它,如果,例如,要渲染的兩個相同的視圖,並希望不同的ID的元素)
<% Html.RenderPartial("path-to-partial-view", Model, new ViewDataDictionary() { TemplateInfo = new TemplateInfo() { HtmlFieldPrefix = "myPrefix" } }); %>
那麼該值將不會被選中。
看起來類似於DropDownListFor in EditorTemplate not selecting value的問題,但來自不同的原因。
對着MVC 3源好像問題出在 它採用了htmlHelper.ViewData.Eval(fullName);
從而未能獲得通過的全名時,它所包含的前綴值,
TextBoxFor不會失敗的SelectInternal
方法因爲它傳遞的表達InputHelper的值,因此它不會使用ViewData.Eval
只是要確定在局部視圖測試了它:
在局部視圖 下面將打印"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 { })%>
不太喜歡這個解決方案+我知道我可以在部分視圖中創建列表,這也是醜陋的,
是否有另一種解決方案呢?