DropDownListFor selected value does not work with property in list
asp.net-mvc-4, get, html.dropdownlistfor, model, selecteditem
Solution
After some research here dropdownlistfor does not select correct value in a loop I found a solution.
This works:
@Html.DropDownListFor(m => m.Renter.RentLines[0].GarageId,
new SelectList(Model.RentableGarageItems, "Value", "Text", Model.Renter.RentLines[0].GarageId))
Problem
I have problems to set the default selected value of a DropDownList with DropDownListFor in ASP MVC 4. When the property which I want to preselect is in a list it's never selected by default as expected. Here is my code reduced to the important stuff: Models: ``` public class Renter { ... public virtual List<RentLine> RentLines { get; set; } ... public Renter() { ... RentLines = new List<RentLine>(); ... } } public class RentLine { ... public Guid RenterId { get; set; } public virtual Renter Renter { get; set; } public Guid GarageId { get; set; } public virtual Garage Garage { get; set; } ... public RentLine() { // // Testcase for default value in dropdownlist // GarageId = new Guid("e926dcac-05ac-4fc1-92a2-014345e6e11c"); } } ``` Controller: ``` public ActionResult Hinzufuegen() { var model = new AddRenterViewModel(); return View(model); } ``` ViewModel: ``` public class AddRenterViewModel { public Renter Renter { get; set; } public List<SelectListItem> RentableGarageItems { get; set; } ... public AddRenterViewModel() { Renter = new Renter(); Renter.RentLines.Add(new RentLine()); RentableGarageItems = new List<SelectListItem>(); foreach (var garage in Singleton.Instance.Entities.GetRentableGarages().OrderBy(g => g.No)) { RentableGarageItems.Add(new SelectListItem{Text = garage.No.ToString(), Value = garage.Id.ToString()}); } } } ``` View: ``` @model Grossgaragenverwaltung.ViewModels.AddRenterViewModel ... Garage Nr. @Html.DropDownListFor(m => m.Renter.RentLines[0].GarageId, Model.RentableGarageItems) @* No selected value *@ @Html.TextBoxFor(m => m.Renter.RentLines[0].GarageId) @* Shows the id 'e926dcac-05ac-4fc1-92a2-014345e6e11c' as set in the constructor *@ ... ``` Here is the result, no selected value: ``` Garage Nr. <select id="Renter_RentLines_0__GarageId" name="Renter.RentLines[0].GarageId" data-val-required="Das Feld "GarageId" ist erforderlich." data-val="true"> <option value="225a761d-7d12-4e02-9d72-d54fb6934f05">1</option> <option value="d28fb4fb-d65b-4674-90d6-a4ab9636be80">2</option> <option value="e06b520b-e876-4870-b321-dc65f77967a7">3</option> <option value="56832d98-aa5a-4e1a-af44-2d7e00f2bb3a">4</option> <option value="551f1fa9-13a5-40ce-b795-50063e605027">5</option> <option value="bace4b40-92ab-4757-9716-2a2878c2c9e8">6</option> <option value="f9baf45b-96bf-463e-a234-a1522bfc9b9b">7</option> <option value="91d1d866-6346-4ab0-b2aa-35b56eeaf2b0">8</option> <option value="62eb3727-eab2-4180-90cd-7dc59119f44e">9</option> <option value="59768097-c772-4421-b907-a24397a106f5">10</option> <option value="270acf6b-e4e3-41c3-86dd-4381a313848a">11</option> <option value="923269cd-1ead-4346-90ce-6344acda5b1b">12</option> <option value="981ee61e-408b-4b08-a7d3-26c909f04a9d">13</option> <option value="f1c5043c-fe41-4a8e-8c58-e88363885de4">14</option> <option value="e926dcac-05ac-4fc1-92a2-014345e6e11c">15</option> <option value="5577dc00-7cfa-4bcd-99ad-3f356e4325ae">16</option> </select> <input id="Renter_RentLines_0__GarageId" type="text" value="e926dcac-05ac-4fc1-92a2-014345e6e11c" name="Renter.RentLines[0].GarageId"> ``` How can i get this work? UPDATE: Here is a working example where everything works like expected, the problem occurs only in the case you see above: ``` public class Renter { ... public Salutation Salutation { get; set; } ... public Renter() { ... Salutation = Salutation.Male; ... } } public ActionResult Hinzufuegen() { var model = new AddRenterViewModel(); return View(model); } public class AddRenterViewModel { public Renter Renter { get; set; } public List<SelectListItem> SalutationItems { get; set; } ... public AddRenterViewModel() { Renter = new Renter(); Renter.RentLines.Add(new RentLine()); SalutationItems = new List<SelectListItem>(); foreach (Salutation salutation in Enum.GetValues(typeof(Salutation))) { SalutationItems.Add(new SelectListItem { Text = NameEnum.GetName(salutation), Value = salutation.ToString() }); } } } @Html.DropDownListFor(m => m.Renter.Salutation, Model.SalutationItems) <select id="Renter_Salutation" name="Renter.Salutation" data-val-required="Das Feld "Salutation" ist erforderlich." data-val="true"> <option value="Company">Firma</option> <option value="Male" selected="selected">Männlich</option> <option value="Female">Weiblich</option> </select> ```