MVC5 – Cómo configurar “selectedValue” en DropDownListFor Html helper

Como dice la pregunta: ¿Cómo establecer selectedValue en DropDownListFor Html helper?

Probé la mayoría de las otras soluciones pero ninguna funcionó, por eso estoy abriendo una nueva pregunta.

Nada de esto ayudó:

@Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", 2), htmlAttributes: new { @class = "form-control" }) //Not working with or without cast @Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Single(x => x.Id == 2)), htmlAttributes: new { @class = "form-control" }) @Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", (ProjectName.Models.TipDepozita)Model.TipoviDepozita.Where(x => x.Id == 2).FirstOrDefault()), htmlAttributes: new { @class = "form-control" }) @Html.DropDownListFor(m => m.TipPopustaId, new SelectList(Model.TipoviDepozita, "Id", "Naziv", new SelectListItem() { Value="2", Selected=true}), htmlAttributes: new { @class = "form-control" }) 

Me gustaría evitar la creación manual de SelectListItems o un ViewModel solo para la lista si es posible.

Cuando utiliza el método DropDownListFor() (o DropDownList() ) para enlazar a una propiedad del modelo, es el valor de la propiedad que establece la opción seleccionada.

Internamente, los métodos generan su propio IEnumerable y establecen la propiedad Selected función del valor de la propiedad, y por lo tanto, se ignora establecer la propiedad Selected en su código. El único momento en que se respeta es cuando no se vincula a una propiedad del modelo, por ejemplo usando

 @Html.DropDownList("NotAModelProperty", new SelectList(Model.TipoviDepozita, "Id", "Naziv", 2)) 

Tenga en cuenta que puede inspeccionar el código fuente , en particular los SelectInternal() y GetSelectListWithDefaultValue() para ver cómo funciona en detalle.

Para mostrar la opción seleccionada cuando la vista se representa por primera vez, establezca el valor de la propiedad en el método GET antes de pasar el modelo a la vista

También recomiendo que su modelo de vista contenga una propiedad IEnumerable TipoviDepozita y que genere la SelectList en el controlador

 var model = new YourModel() { TipoviDepozita = new SelectList(yourCollection, "Id", "Naziv"), TipPopustaId = 2 // set the selected option } return View(model); 

entonces la vista se vuelve

 @Html.DropDownListFor(m => m.TipPopustaId, Model.TipoviDepozita, new { @class = "form-control" }) 

Asegúrese de que su valor de selección de devolución sea una cadena y no e int cuando lo declare en su modelo.

Ejemplo:

 public class MyModel { public string TipPopustaId { get; set; } } 
 public static class EnumHelper { public static SelectList EnumToSelectList(this Type enumType, object selectedValue) { new SelectList(Enum.GetValues(enumType).Cast().ToList().ToDictionary(n=> n), "Key", "Value", selectedValue); } } 

Y en su Vista:

 @Html.DropDownListFor(model => model.Role, EnumHelper.EnumToSelectList(typeof(Role), Model.Role), new { htmlAttributes = new { @class = "padding_right" } }) @Html.ValidationMessageFor(model => model.Role, "", new { @class = "text-danger" }) 

En lugar de EnumToList use cualquier otra lista y seleccione la clave y el valor de las propiedades de su tipo de lista