dropdownlist c# asp.net-mvc asp.net-mvc-5 html.dropdownlistfor selectlist

c# - dropdownlistfor selected value



MVC DropDownList valor seleccionado no funciona (2)

Estoy usando MVC 5.

Tengo mi ViewBag para la lista como

ViewBag.TitleList = new SelectList((new string[] { "Mr", "Miss", "Ms", "Mrs" }), contact.Title); //contact.Title has selected value.

luego intenté convertir la matriz a SelectListItem ( to no avail)

En la vista se ve como

@Html.DropDownListFor(model => model.Title, ViewBag.TitleList as SelectList, "Select")

también lo intenté

@Html.DropDownList("Title", ViewBag.TitleList as SelectList, "Select")

La lista se carga correctamente pero el Selected Value is Not selected . ¿Cómo arreglar este problema?

Actualización El culpable era ViewBag.Title que concuerda con mi modelo. Título. Cambié el nombre de mi propiedad modelo a otra cosa y funcionó. Arrgh!


Establecer el valor de la propiedad Title en el controlador:

ViewBag.TitleList = new SelectList(new string[] { "Mr", "Miss", "Ms", "Mrs" }); viewModel.Title = "Miss"; // Miss will be selected by default

Otra posible razón (y la correcta, basada en los comentarios a continuación) es que ViewData["Title"] se reemplaza por otro valor. Cambie el nombre de la propiedad del Title por otro y todo debería funcionar.


Cuando no se especifica un valor (es decir, "Id"), DropDownListFor a veces no se comporta correctamente. Prueba esto:

public class FooModel { public int Id { get; set; } public string Text { get; set; } } var temp = new FooModel[] { new FooModel {Id = 1, Text = "Mr"}, new FooModel {Id = 2, Text = "Miss"}, new FooModel {Id = 3, Text = "Ms"}, new FooModel {Id = 4, Text = "Mrs"} }; ViewBag.TitleList = new SelectList(temp, "Id", "Text", 2);

EDITAR: otra solución

var temp = new [] { new SelectListItem {Value = "Mr", Text = "Mr"}, new SelectListItem {Value = "Miss", Text = "Miss"}, new SelectListItem {Value = "Ms", Text = "Ms"}, new SelectListItem {Value = "Mrs", Text = "Mrs"} }; ViewBag.TitleList = new SelectList(temp, "Value", "Text", "Miss");