mvc ejemplos dropdownlist combos cascada asp.net-mvc-3 razor html-select selectedvalue

asp.net-mvc-3 - ejemplos - html dropdownlist mvc 5



El valor seleccionado Html.DropDownList no funciona con ViewBag (5)

Bueno, después de un par de horas leyendo cosas por aquí, intentando sin éxito todas las soluciones, también encontré este artículo que pensé que salvaría mi vida ... nada.

Larga historia corta.

Aquí está mi vista (todas las combinaciones)

@Html.DropDownList("yearDropDown",(IEnumerable<SelectListItem>)ViewBag.yearDropDown) @Html.DropDownList("yearDropDownxxx",(IEnumerable<SelectListItem>)ViewBag.yearDropDown) @Html.DropDownList("yearDropDown",(<SelectList>)ViewBag.yearDropDown) @Html.DropDownList("yearDropDown")

Aquí está mi controlador

public ActionResult(int year) { var years = new int[] { 2007, 2008, 2009, 2010, 2011, 2012 } .Select(x => new SelectListItem { Text = x.ToString(), Value = x.ToString(), Selected=x==year }).Distinct().ToList(); years.Insert(0, new SelectListItem { Value = null, Text = "ALL YEARS" }); ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault()); return View(); }

Aquí está mi HTML renderizado. Seleccionado en ninguna parte.

<select id="yearDropDown" name="yearDropDown"><option value="">ALL YEARS</option> <option value="2007">2007</option> <option value="2008">2008</option> <option value="2009">2009</option> <option value="2010">2010</option> <option value="2011">2011</option> <option value="2012">2012</option> </select>

No hace falta mencionar, pero lo haré, lo compré en mi reloj y SelectList en realidad tiene la propiedad SelectedValue poblada con el año seleccionado pasado al controlador. Pero cuando renderizo en la vista, va a la primera opción.

Por favor, necesito la solución para DropDownList , NO para DropDownListFor . Estoy resaltando esto porque vi a otras personas aquí pidiendo la misma ayuda y muchas personas les dieron instrucciones, y casi las ordenaron, para usar DropDownListFor. Hay una razón por la cual NECESITO usar DropDownList.

SOLUCIÓN: mira mi propia respuesta. Sin embargo, aquí están los cambios simples que hice.

Controlador:

ViewBag.yearDropDown = years;

Ver:

@Html.DropDownList("yearDropDown")


Cambie el nombre de la propiedad ViewBag para NO coincidir con el nombre de DropDownList. Utilice ViewBag.yearDropDownDD lugar de ViewBag.yearDropDown .

TAMBIÉN, está creando la Lista de selección de manera incorrecta. Debe pasar el valor seleccionado, no el elemento de la matriz:

ViewBag.yearDropDown = new SelectList(years, "Value", "Text", years.Where(x => x.Selected).FirstOrDefault().Value);


El primer lugar en el que debería haber ido a aprender ... y no lo hice.

Aquí está mi solución

Gracias por tus respuestas. Realmente lo aprecio. Tengo ganas de dispararme a mi propio pie ahora. Dos horas leyendo blogs y tardé 2 minutos en replicar este ejemplo y funcioné perfectamente ...



El problema también puede ser el nombre, mira aquí.

En el controlador

ViewBag.PersonList= new SelectList(db.Person, "Id", "Name", p.PersonId);

En la vista

@Html.DropDownList("PersonList",(SelectList)ViewBag.PersonList )

Esto no funcionará, tienes que cambiar el nombre, así que no es lo mismo.

@Html.DropDownList("PersonList123",(SelectList)ViewBag.PersonList )

Así que cambie yearDropDown y le funcionará.

Saludos cordiales, Christian Lyck.


Sé que es una vieja pregunta, pero compartiré otra solución ya que algunas veces ha hecho algo correctamente, pero no puede ver el valor seleccionado después de una solicitud y respuesta, ya que su afeitadora puede tener errores. En esta condición, que he tenido, puedes usar la opción de seleccionar usando viewbag:

En el controlador que tenía:

ViewBag.MyData = GetAllData(strSelected); ...

y como una función privada en el controlador que tuve:

private List<SelectListItem> GetAllData(List<string> selectedData) { return MyGetAll().Select(x => new SelectListItem { Text = x.Point, Value = x.Amount.ToString(), Selected = selectedPrizes.Contains(x.Amount.ToString()) }) .ToList(); }

Y en .cshtml tuve:

<select id="Amount" name="Amount" multiple="multiple"> @foreach (var listItem in (List<SelectListItem>)ViewBag.MyData) { <option value="@listItem.Value" @(listItem.Selected ? "selected" : "")> @listItem .Text </option> } </select>

Espero que sea útil para problemas similares :)