Znaleźliśmy dziwne zachowanie w DropDownListFor (wydanie ASP.NET MVC3). W menu rozwijanym wybiera wartość właściwości ViewBag zamiast wartości właściwości Model.Wartość właściwości ViewBag w DropDownListFor zamiast wartości właściwości Model
Model:
public class Country {
public string Name { get; set; }
}
public class User {
public Country Country { get; set; }
}
Index Controller działanie:
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);
Widok:
@Html.EditorFor(user => user.Country.Name)
@Html.DropDownListFor(user => user.Country.Name,
new SelectList(ViewBag.CountryList, "Name", "Name", Model.Country), "...")
To pokaże pole tekstowe z "Rosja" wartości i rozwijanym z "Danmark" wartości wybrane zamiast "Rosja".
Nie znalazłem żadnej dokumentacji dotyczącej tego zachowania. Czy to zachowanie jest normalne? I dlaczego jest to normalne? Ponieważ bardzo trudno kontrolować nazwy właściwości ViewBag i Model.
This sample MVC3 project sources
Czy sugerujesz, aby zawsze używać prefiksu dla nazwy właściwości ViewBag, aby uniknąć konfliktu nazw? Dawny. ViewBag.ViewBag_Country –
Święte bzdury, masz rację. Dziękuję za to ... uratowałem mój dzień ... :) – dizzwave