¿Puede el nombre de ViewBag ser el mismo que el nombre de la propiedad del modelo en DropDownList?

Resuelto John John asked hace 8 años • 2 respuestas

Estoy trabajando en una aplicación web ASP.NET MVC-4. Estoy definiendo lo siguiente dentro de mi método de acción para construir un SelectList:

ViewBag.CustomerID = new SelectList(db.CustomerSyncs, "CustomerID", "Name");

Luego estoy representando DropDownListForlo siguiente dentro de mi View:

 @Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")

Como se muestra, estoy nombrando la ViewBagpropiedad para que sea igual al Modelnombre de la propiedad, que es CustomerID. Según mis propias pruebas, definir el mismo nombre no causó ningún problema o conflicto, pero ¿debería evitarlo?

John John avatar May 11 '16 18:05 John John
Aceptado

No debe usar el mismo nombre para la propiedad del modelo y la ViewBagpropiedad (e idealmente no debería usar ViewBagningún nombre, sino más bien un modelo de vista con una IEnumerable<SelectListItem>propiedad).

Cuando se utiliza @Html.DropDownListFor(m => m.CustomerId, ....)la primera "Please Select"opción, siempre se seleccionará incluso si el valor de la propiedad del modelo se ha establecido y coincide con una de las opciones. La razón es que el método primero genera un nuevo IEnumerable<SelectListItem>basado en el que usted proporcionó para establecer el valor de la Selectedpropiedad. Para establecer la Selectedpropiedad, lee el valor de CustomerIDfrom ViewDatay el primero que encuentra es "IEnumerable<SelectListItem>"(no el valor de la propiedad del modelo) y no puede hacer coincidir esa cadena con ninguna de sus opciones, por lo que se selecciona la primera opción (porque algo tiene que ser).

Al utilizar @Html.DropDownList("CustomerId", ....), no data-val-*se generarán atributos y no obtendrá ninguna validación del lado del cliente.

Consulte este DotNetFiddle que muestra una comparación de posibles casos de uso. Sólo si se utilizan nombres diferentes para la propiedad del modelo y la ViewBagpropiedad todo funcionará correctamente.

 avatar May 11 '2016 12:05

No hay nada de malo en usarlo. No obtendrá ningún error. pero la mejor práctica es vincular la propiedad del modelo.

CrazyDev avatar May 11 '2016 11:05 CrazyDev