asp.net mvc - textboxfor - MVC5-Cómo configurar "selectedValue" en DropDownListFor Html helper
que son los html helpers en asp.net mvc (3)
Asegúrese de que su Valor de selección de retorno sea una Cadena y no e int cuando lo declare en su modelo.
Ejemplo:
public class MyModel
{
public string TipPopustaId { get; set; }
}
Como dice la pregunta: ¿Cómo configurar selectedValue en DropDownListFor Html helper?
Intenté 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 ViewModel solo para la lista si es posible.
Cuando utiliza el método
DropDownListFor()
(o
DropDownList()
) para enlazar a una propiedad de modelo, es el valor de la propiedad que establece la opción seleccionada.
Internamente, los métodos generan su propio
IEnumerable<SelectListItem>
y establecen la propiedad
Selected
función del valor de la propiedad y, por lo tanto, se ignora la configuración de la propiedad
Selected
.
El único momento en que se respeta es cuando no se vincula a una propiedad modelo, por ejemplo, utilizando
@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 procesa 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<SelectListItem> 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 convierte
@Html.DropDownListFor(m => m.TipPopustaId, Model.TipoviDepozita, new { @class = "form-control" })
public static class EnumHelper
{
public static SelectList EnumToSelectList<TEnum>(this Type enumType, object selectedValue)
{
return new SelectList(Enum.GetValues(enumType).Cast<TEnum>().ToList().ToDictionary(n=> n), "Key", "Value", selectedValue);
}
}
Y en tu vista:
@Html.DropDownListFor(model => model.Role, EnumHelper.EnumToSelectList<Role>(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