1

when using

<%= Html.DropDownListFor(model => model.FeeTypeId, Model.GetFeeTypes(), new { })%>

in this case the right option is selected according to Model.FeeTypeId when the select is rendered.

BUT
if you render the form using a partial view, passing it a specific HtmlFieldPrefix (you will need it if,for example, you want to render two identical views and want different ids the elements)

<% Html.RenderPartial("path-to-partial-view", Model, new ViewDataDictionary() { TemplateInfo = new TemplateInfo() { HtmlFieldPrefix = "myPrefix" } }); %>

then the value will not be selected.

looks similar to the problem at DropDownListFor in EditorTemplate not selecting value but from different cause.

looked in the MVC 3 source and seems like the problem is at the SelectInternal method it uses the htmlHelper.ViewData.Eval(fullName);
which fails to get the value by the full name when it contains the prefix,
TextBoxFor doesn't fail as it passes the value of the expression to InputHelper so it doesn't get to use the ViewData.Eval

just to be sure tested it at the partial view:
in the partial view the following will print "myPrefix.FeeTypeId"

<%= Html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldName("FeeTypeId") %>

and the following will print "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"))%>

The only solution i found is to generate a List at Model.GetFeeTypes() and mark the option i want as selected:

<%= Html.DropDownListFor(model => model.FeeTypeId, Model.GetFeeTypes(Model.FeeTypeId), new { })%>

don't really like this solution + i know i can create the List in the partial view which is also ugly,
is there another solution to this?

Community
  • 1
  • 1
Avi Pinto
  • 4,266
  • 2
  • 24
  • 24

1 Answers1

1

I have discovered that this is a bug in MVC. It's not fixed, though there is a work around. See my question answered by myself (I had the same problem before finding your post).

MVC4 binding drop down list in a list (bug)

Regards
Craig

Community
  • 1
  • 1
Jim
  • 14,952
  • 15
  • 80
  • 167