DropDownListFor que no selecciona el valor

Estoy usando el método DropDownListFor helper dentro de una página de edición y no estoy teniendo suerte para seleccionar el valor que especifico. Noté una pregunta similar sobre Stackoverflow. La solución sugerida era “completar su lista de selección en el código de vista”. El problema es que ya lo he intentado y todavía no funciona.

 model.States, new SelectList(Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%> 

He establecido un punto de interrupción y he verificado la existencia (y validez) del modelo.AddressStateAbbr. No estoy seguro de lo que me estoy perdiendo.

Después de investigar durante una hora, descubrí que el problema que causa que el seleccionado no se configure en DropDownListFor . La razón es que está usando el nombre de ViewBag igual que la propiedad del modelo.

Ejemplo

 public class employee_insignia { public int id{get;set;} public string name{get;set;} public int insignia{get;set;}//This property will store insignia id } // If your ViewBag's name same as your property name ViewBag.Insignia = new SelectList(db.MtInsignia.AsEnumerable(), "id", "description", 1); 

Ver

  @Html.DropDownListFor(model => model.insignia, (SelectList)ViewBag.Insignia, "Please select value") 

La opción seleccionada no se configurará como lista desplegable, PERO cuando cambie el nombre de ViewBag a un nombre diferente, la opción seleccionada se mostrará como correcta.

Ejemplo

 ViewBag.InsigniaList = new SelectList(db.MtInsignia.AsEnumerable(), "id", "description", 1); 

Ver

  @Html.DropDownListFor(model => model.insignia, (SelectList)ViewBag.InsigniaList , "Please select value") 

Tratar:

 <%= Html.DropDownListFor( model => model.AddressStateAbbr, new SelectList( Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%> 

o en la syntax de Razor:

 @Html.DropDownListFor( model => model.AddressStateAbbr, new SelectList( Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --") 

Los helpers basados ​​en expresiones no parecen respetar la propiedad Selected de SelectListItems en su SelectList.

Si bien no aborda esta pregunta, puede ayudar a los futuros usuarios de Google si siguieron mi camino de pensamiento:

Quería una selección múltiple y este hack de atributo en DropDownListFor no fue la selección automática

 Html.DropDownListFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems, new {multiple= "multiple" }) 

en su lugar, debería haber estado usando ListBoxFor que hizo que todo funcionara

 Html.ListBoxFor(m => m.TrainingLevelSelected, Model.TrainingLevelSelectListItems) 

Si lo está haciendo correctamente y usando un modelo, a diferencia de todos estos bichos raros de ViewBag, y sigue viendo el problema, es porque @Html.DropDownListFor(m => m.MyValue, @Model.MyOptions) no puede coincidir con MyValue con las opciones que tiene en MyOptions . Las dos posibles razones para eso son:

  1. MyValue es nulo. No lo ha establecido en su ViewModel. Hacer que una de MyOptions tenga un Selected=true no resolverá esto.
  2. Más sutilmente, el tipo de MyValue es diferente de los tipos en MyOptions . Entonces, si MyValue es (int) 1 , pero MyOptions es una lista de cadenas acolchadas {"01", "02", "03", ...} , obviamente no va a seleccionar nada.

También tengo un problema similar y lo resuelvo de la siguiente manera, establezco el

modelo.Establece propiedad en su controlador para lo que necesita para ser seleccionado

model.States = “California”

y luego obtendrá “California” como valor predeterminado.

este problema es común. cambie el nombre de propiedad de viewbag a otro nombre de variable de modelo utilizado en la página.

Otra cosa para comprobar si no es todo su propio código, es asegurarse de que no haya una función de JavaScript que cambie el valor de la carga de la página. Después de horas de golpear mi cabeza contra una pared leyendo todas estas soluciones, descubrí que esto es lo que estaba sucediendo conmigo.