¿Puede el nombre de ViewBag ser el mismo que el nombre de la propiedad del modelo en DropDownList?
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 DropDownListFor
lo siguiente dentro de mi View
:
@Html.DropDownListFor(model => model.CustomerID, (SelectList)ViewBag.CustomerID, "please select")
Como se muestra, estoy nombrando la ViewBag
propiedad para que sea igual al Model
nombre 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?
No debe usar el mismo nombre para la propiedad del modelo y la ViewBag
propiedad (e idealmente no debería usar ViewBag
ningú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 Selected
propiedad. Para establecer la Selected
propiedad, lee el valor de CustomerID
from ViewData
y 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 ViewBag
propiedad todo funcionará correctamente.
No hay nada de malo en usarlo. No obtendrá ningún error. pero la mejor práctica es vincular la propiedad del modelo.