¿Puede el nombre ViewBag ser el mismo que el nombre de la propiedad Model 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 crear una lista SelectList :

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

Luego estoy renderizando mi DropDownListFor como sigue dentro de mi View :

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

Como se muestra, estoy nombrando la propiedad ViewBag para que sea igual al nombre de la propiedad del Model que es CustomerID . De mi propia prueba, 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 propiedad ViewBag (e idealmente no debería usar ViewBag , sino un modelo de vista con una IEnumerable ).

Al usar @Html.DropDownListFor(m => m.CustomerId, ....) la primera opción "Please Select" siempre se seleccionará aunque el valor de la propiedad del modelo se haya configurado y coincida con una de las opciones. La razón es que el método primero genera un nuevo IEnumerable basado en el que ha proporcionado para establecer el valor de la propiedad Selected . Para establecer la propiedad Selected , lee el valor de CustomerID desde ViewData , y el primero que encuentra es "IEnumerable" (no el valor de la propiedad del modelo) y no puede hacer coincidir esa cadena con ninguna de sus opciones, entonces la primera opción es seleccionada (porque algo tiene que ser).

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

Consulte este DotNetFiddle que muestra una comparación de posibles casos de uso. Solo al usar diferentes nombres para la propiedad del modelo y la propiedad ViewBag todo funcionará correctamente.

No hay daño usarlo. No obtendrás ningún error. pero la mejor práctica es vincular la propiedad del modelo.