Encontramos un comportamiento extraño en DropDownListFor (versión ASP.NET MVC3). Selecciona el valor de la propiedad ViewBag en lugar del valor de la propiedad Model en el menú desplegable.Valor de propiedad ViewBag en DropDownListFor en lugar del valor de propiedad del modelo
Modelo:
public class Country {
public string Name { get; set; }
}
public class User {
public Country Country { get; set; }
}
Índice de controlador de acción:
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), "...")
cuadro de texto se mostrará con el valor "Rusia" y desplegable con el valor "Danmark" seleccionado en lugar de "Rusia".
No se encontró documentación sobre este comportamiento. ¿Es este comportamiento normal? ¿Y por qué es normal? Porque es muy difícil controlar los nombres de las propiedades ViewBag y Model.
This sample MVC3 project sources
¿Sugiere siempre utilizar el prefijo para el nombre de la propiedad ViewBag para evitar el conflicto de nombres? Ex. ViewBag.ViewBag_Country –
Santa mierda, tienes razón. Gracias por esto ... me salvó el día ... :) – dizzwave