Мы обнаружили странное поведение в DropDownListFor (выпуск ASP.NET MVC3). Он выбирает значение свойства ViewBag вместо значения свойства модели в раскрывающемся списке.Значение свойства ViewBag в DropDownListFor вместо значения свойства модели
Модель:
public class Country {
public string Name { get; set; }
}
public class User {
public Country Country { get; set; }
}
Index контроллер действия:
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);
Вид:
@Html.EditorFor(user => user.Country.Name)
@Html.DropDownListFor(user => user.Country.Name,
new SelectList(ViewBag.CountryList, "Name", "Name", Model.Country), "...")
Он покажет текстовое поле со значением "Россия" и в раскрывающемся списке со значением "Danmark" вместо «Россия».
Я не нашел документацию о данном нарушении правил. Это нормальное поведение? И почему это нормально? Потому что очень сложно управлять именами свойств ViewBag и Model.
This sample MVC3 project sources
Вы предлагаете всегда использовать префикс для имени свойства ViewBag, чтобы избежать столкновения имен? Ex. ViewBag.ViewBag_Country –
Святое дерьмо, вы правы. Спасибо за это ... спасли мой день ... :) – dizzwave