Abbiamo rilevato un comportamento strano in DropDownListFor (versione MVC3 di ASP.NET). Seleziona il valore della proprietà ViewBag invece del valore della proprietà Model nel menu a discesa.Valore della proprietà ViewBag in DropDownListFor invece del valore della proprietà Model
Modello:
public class Country {
public string Name { get; set; }
}
public class User {
public Country Country { get; set; }
}
Indice Action Controller:
ViewBag.CountryList = new List<Country> { /* Dropdown collection */
new Country() { Name = "Danmark" },
new Country() { Name = "Russia" } };
var user = new User();
user.Country = new Country(){Name = "Russia"}; /* User value */
ViewBag.Country = new Country() { Name = "Danmark" }; /* It affects user */
return View(user);
Vista:
@Html.EditorFor(user => user.Country.Name)
@Html.DropDownListFor(user => user.Country.Name,
new SelectList(ViewBag.CountryList, "Name", "Name", Model.Country), "...")
Sarà casella di testo mostrerà con valore "Russia" e discesa con valore "Danmark" selezionato al posto di "Russia".
Non ho trovato alcuna documentazione su questo comportamento. Questo comportamento è normale? E perché è normale? Perché è molto difficile controllare i nomi delle proprietà di ViewBag e Model.
This sample MVC3 project sources
Suggerite di utilizzare sempre il prefisso per il nome della proprietà ViewBag per evitare conflitti tra i nomi? Ex. ViewBag.ViewBag_Country –
holy crap, hai ragione. Grazie per questo ... ho salvato la mia giornata ... :) – dizzwave