Estoy usando el método auxiliar DropDownListFor dentro de una página de edición y no tengo suerte para seleccionar el valor que especifico. Noté una pregunta similar en Stackoverflow. La solución alternativa sugerida fue "rellenar su SelectList en el código de vista". El problema es que ya probé esto y todavía no funciona.
<%= Html.DropDownListFor(model => 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.
fuente
@Html.DropDownListFor(model => model.Title, (SelectList)ViewBag.Salutation, Resources.Labels.Unknown )
Tratar:
<%= Html.DropDownListFor( model => model.AddressStateAbbr, new SelectList( Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")%>
o en la sintaxis de Razor:
@Html.DropDownListFor( model => model.AddressStateAbbr, new SelectList( Model.States.OrderBy(s => s.StateAbbr), "StateAbbr", "StateName", Model.AddressStateAbbr), "-- Select State --")
Los ayudantes basados en expresiones no parecen respetar la propiedad Selected de SelectListItems en su SelectList.
fuente
Si lo está haciendo correctamente y está utilizando 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 coincidirMyValue
con las opciones que tieneMyOptions
. Las dos posibles razones para ello son:MyValue
es nulo. No lo ha configurado en su ViewModel. Hacer uno deMyOptions
tener unSelected=true
no va a resolver esto.MyValue
es diferente a los tipos deMyOptions
. Entonces, si loMyValue
es(int) 1
, peroMyOptions
es una lista de cadenas acolchadas{"01", "02", "03", ...}
, obviamente no va a seleccionar nada.fuente
<option value="2">some text</option>
. En realidad, parece estar intentando hacer coincidir la propiedad del modelo de vista con el texto de visualización y no con el atributo de valor para elegir la opción seleccionada. Esto me tuvo por un tiempo.Si bien no aborda esta pregunta, puede ayudar a los futuros usuarios de Google si siguieron mi ruta de pensamiento:
Quería una selección múltiple y este truco de atributo en DropDownListFor no se seleccionaba automáticamente
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)
fuente
También tengo un problema similar y lo resuelvo de la siguiente manera, configure el
Model.States propiedad en su controlador a lo que necesita para ser seleccionado
model.States = "California"
y luego obtendrá "California" como valor predeterminado.
fuente
este problema es común. cambie el nombre de la propiedad de viewbag a otro nombre de variable de modelo usado en la página.
fuente
Otra cosa que debe verificar si no es todo su propio código, es asegurarse de que no haya una función javascript que cambie el valor en la carga de la página. Después de horas de golpearme la cabeza contra una pared leyendo todas estas soluciones, descubrí que esto es lo que me estaba sucediendo.
fuente
Encontré este problema recientemente. Me volvió loco durante aproximadamente una hora. En mi caso, no estaba usando una
ViewBag
variable con el mismo nombre que la propiedad del modelo.Después de rastrear los cambios de control de fuente, el problema resultó ser que mi acción tenía un argumento con el mismo nombre que la propiedad del modelo:
public ActionResult SomeAction(string someName) { var model = new SomeModel(); model.SomeNames = GetSomeList(); //Notice how the model property name matches the action name model.someName = someName; }
En la vista:
@Html.DropDownListFor(model => model.someName, Model.SomeNames)
Simplemente cambié el argumento de la acción a otro nombre y comenzó a funcionar nuevamente:
public ActionResult SomeAction(string someOtherName) { //.... }
Supongo que también se podría cambiar el nombre de propiedad del modelo, pero en mi caso, el nombre del argumento no tiene sentido, así que ...
Con suerte, esta respuesta le ahorrará el problema a otra persona.
fuente
El problema, al menos para mí, estaba relacionado con el
IEnumerable<T>
.Básicamente, lo que sucedió fue que la vista y el modelo no tenían la misma referencia para la misma propiedad.
Si haces esto
IEnumerable<CoolName> CoolNames {get;set;} = GetData().Select(x => new CoolName{...});}
Luego enlaza esto usando el
@Html.DropDownListFor(model => model.Id, Model.CoolNames)
La Vista pierde el rastro de la propiedad CoolNames, una solución simple es simplemente agregar
.ToList()
Después de hacer una proyección (.Select()
);).fuente
Yo tuve el mismo problema. En el siguiente ejemplo, la variable ViewData ["DATA_ACREDITO_MODELO_INTEGRADO"] tiene una lista SelectListItem con un valor seleccionado predeterminado, pero dicho atributo no se refleja visualmente.
// data var p_estadoAcreditacion = "NO"; var estadoAcreditacion = new List<SelectListItem>(); estadoAcreditacion.Add(new SelectListItem { Text = "(SELECCIONE)" , Value = " " }); estadoAcreditacion.Add(new SelectListItem { Text = "SI" , Value = "SI" }); estadoAcreditacion.Add(new SelectListItem { Text = "NO" , Value = "NO" }); if (!string.IsNullOrEmpty(p_estadoAcreditacion)) { estadoAcreditacion.First(x => x.Value == p_estadoAcreditacion.Trim()).Selected = true; } ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] = estadoAcreditacion;
Lo resolví haciendo el primer argumento de DropdownList, diferente al atributo id.
// error: @Html.DropDownList("SELECT__ACREDITO_MODELO_INTEGRADO" , ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem> , new { id = "SELECT__ACREDITO_MODELO_INTEGRADO" ... // solved : @Html.DropDownList("DROPDOWNLIST_ACREDITO_MODELO_INTEGRADO" , ViewData["DATA_ACREDITO_MODELO_INTEGRADO"] as List<SelectListItem> , new { id = "SELECT__ACREDITO_MODELO_INTEGRADO"
...
fuente
Sé que esta es una pregunta antigua, pero he tenido el mismo problema en 2020.
Resulta que el problema era que la propiedad del modelo se llamaba "Título", le cambié el nombre a "GivenTitle" y ahora funciona como se esperaba.
Desde
Html.DropDownListFor(m => m.Title, Model.Titles, "Please Select", new { @class = "form-control" })
a
Html.DropDownListFor(m => m.GivenTitle, Model.GivenTitles, "Please Select", new { @class = "form-control" })
fuente