Alex Rivera | Logout

ASP.NET MVC Html.DropDownList SelectedValue

Asked 2009-03-09T02:36:09.073
105

I have tried this is RC1 and then upgraded to RC2 which did not resolve the issue.

// in my controller
ViewData["UserId"] = new SelectList(
    users, 
    "UserId", 
    "DisplayName", 
    selectedUserId.Value); // this has a value

result: the SelectedValue property is set on the object

// in my view
<%=Html.DropDownList("UserId", (SelectList)ViewData["UserId"])%>

result: all expected options are rendered to the client, but the selected attribute is not set. The item in SelectedValue exists within the list, but the first item in the list is always defaulted to selected.

How should I be doing this?

Update Thanks to John Feminella's reply I found out what the issue is. "UserId" is a property in the Model my View is strongly typed to. When Html.DropDownList("UserId" is changed to any other name but "UserId", the selected value is rendered correctly.

This results in the value not being bound to the model though.

Edit
Report

1 Answer

0

In ASP.NET MVC 3 you can simply add your list to ViewData...

var options = new List<SelectListItem>();

options.Add(new SelectListItem { Value = "1", Text = "1" });
options.Add(new SelectListItem { Value = "2", Text = "2" });
options.Add(new SelectListItem { Value = "3", Text = "3", Selected = true });

ViewData["options"] = options;

...and then reference it by name in your razor view...

@Html.DropDownList("options")

You don't have to manually "use" the list in the DropDownList call. Doing it this way correctly set the selected value for me too.

Disclaimer:

  1. Haven't tried this with the web forms view engine, but it should work too.
  2. I haven't tested this in the v1 and v2, but it might work.
answered 2011-11-29T14:42:39.190

Your Answer