12

I have viewdata in my controller which is populated by a list:

List<employee> tempEmpList = new List<employee>();
tempEmpList = context.employees.ToList();
ViewData["tempEmpList"] = tempEmpList;

and I am passing this into my view, the question is, how do I place the content of the viewdata list into a dropdown list?

The display data will be .name from the list item.

I know I could do a foreach on the Viewdata and create a select list, but this seems a bit long winded

JustAnotherDeveloper
  • 3,167
  • 11
  • 37
  • 68

3 Answers3

22

You can use the DropDownList html helper:

@Html.DropDownList("SelectedEmployee", 
    new SelectList((IEnumerable) ViewData["tempEmpList"]), "Id", "Name")

In the SelectList constructor, you can specify which properties of the Employee class should be used as both the text and the value within the dropdown (e.g. "Id", "Name")

The name of the dropdown ("SelectedEmployee") will be used when you post back your data to the server.

KirstieBallance
  • 1,238
  • 12
  • 26
nemesv
  • 138,284
  • 16
  • 416
  • 359
  • 1
    This brings up the error: ` CS0305: Using the generic type 'System.Collections.Generic.IEnumerable' requires 1 type arguments` I do like this approach though – JustAnotherDeveloper Aug 23 '12 at 12:09
  • 3
    I think you have reference `System.Collections.Generic` in your view but `SelectList` requires `System.Collections.IEnumerable` try it with the explicit namespace : `new SelectList((System.Collections.IEnumerable) ViewData["tempEmpList"], "Id", "Name")` – nemesv Aug 23 '12 at 12:13
  • I worked it out, had to reference the list and it worked fine :) – JustAnotherDeveloper Aug 23 '12 at 12:16
11

Set up your ViewData in the normal way, assigning a Key name that maps to a property in your model that will be bound on Post ...

ViewData["ModelPropertyName"] = new SelectList(...)

Then in your view simply add a Html.DropDownList ...

@Html.DropDownList("ModelPropertyName")
JDandChips
  • 9,780
  • 3
  • 30
  • 46
  • 1
    I'm working through old code and was so confused as to how the data for a drop down was being bound, but it does seem like if the ViewData key name is the same as the DropDownList name it'll bind automatically. This helped confirm that for me. It's confusing. – user441521 Apr 17 '20 at 16:12
5

Please try with that. I have tried with MVC5

@Html.DropDownList("SelectedEmployee", new SelectList((System.Collections.IEnumerable) ViewData["tempEmpList"],"id","Name"))

Sapnandu
  • 620
  • 7
  • 9