I'm iterating through a list of my Student-viewmodel and creating DropDownLists for each student for their gender. The DownDownList renders fine, but the currently selected value isn't selected by default. (Please read entire post, my problem only occours when using a List of the ViewModel).
This is what I expect to be output:
But I get this
ViewModel
public class Student
{
public string Name { get; set; }
public Gender Gender { get; set; }
public SelectList SelectList { get; set; }
}
public enum Gender
{
Male,
Female,
}
The controller-code
public ActionResult Index()
{
List<SelectListItem> selectLists = new List<SelectListItem>();
foreach (var gender in Enum.GetValues(typeof(Gender)))
selectLists.Add(new SelectListItem() { Text = gender.ToString(), Value = gender.ToString() });
List<Student> viewModel = new List<Student>();
viewModel.Add(new Student() {Name = "Joe", Gender = Gender.Male, SelectList = new SelectList(selectLists, "Value", "Text") });
viewModel.Add(new Student() {Name = "Jane", Gender = Gender.Female, SelectList = new SelectList(selectLists, "Value", "Text") });
return View(viewModel);
}
View-code
@using DropDownListDemo.Models;
@model List<Student>
<div class="row">
@foreach(var item in Model)
{
@Html.Label(item.Name)
<br />
@Html.LabelFor(i => item.Gender)
@Html.DropDownListFor(i => item.Gender, item.SelectList, "Select Gender")
<br />
}
Does anyone have any ideas? Thanks a lot!
EDIT
My initial post wasn't clear enough, so I'll elaborate a bit. The DropDownLists work just fine if i don't use a List of the ViewModel. Please take a look at this code below, which works just fine.
Controller without multiple Students
public ActionResult Index()
{
List<SelectListItem> selectLists = new List<SelectListItem>();
foreach (Gender gender in Enum.GetValues(typeof(Gender)))
selectLists.Add(new SelectListItem() { Text = gender.ToString(), Value = gender.ToString() });
return View(new Student() { Name = "Jane", Gender = Gender.Female, SelectList = new SelectList(selectLists, "Value", "Text") });
}
View without multiple Students
@using DropDownListDemo.Models;
@model Student
<div class="row">
@Html.Label(Model.Name)
<br />
@Html.LabelFor(m => m.Name)
@Html.DropDownListFor(m => Model.Gender, Model.SelectList, "Select Gender")
</div>
Outputs as expected!