/ / MVC5 - Ako nastaviť „selectedValue“ v pomocníkovi DropDownListFor Html - asp.net-mvc, asp.net-mvc-5, html-helper

MVC5 - Ako nastaviť "selectedValue" v pomocníkovi DropDownListFor Html - asp.net-mvc, asp.net-mvc-5, html-helper

Ako hovorí otázka: Ako nastaviť vybranú hodnotu v pomocníkovi DropDownListFor Html?

Vyskúšali sme väčšinu ostatných riešení, ale žiadne nefungovalo, a preto otváram novú otázku.

Nič z toho nepomohlo:

@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" })

Chcel by som sa vyhnúť manuálnemu vytváraniu SelectListItems alebo ViewModel len pre zoznam, ak je to možné.

odpovede:

14 pre odpoveď č. 1

Keď používate DropDownListFor() (alebo DropDownList()) metóda väzby na vlastnosť modelu, jeho hodnota vlastnosti, ktorá nastavuje vybranú možnosť.

Interne tieto metódy generujú svoje vlastné IEnumerable<SelectListItem> a nastavte Selected vlastnosť založená na hodnote vlastnosti, a preto nastavenie Selected vlastníctvo vo vašom kóde je ignorované. Jeho jediný rešpektovaný je, keď sa neviažete na vlastnosť modelu, napríklad pomocou

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

Všimnite si, že môžete skontrolovať zdrojový kód, najmä. \ t SelectInternal() a GetSelectListWithDefaultValue() metódy na zistenie podrobného fungovania.

Ak chcete, aby sa vybraná voľba zobrazila pri prvom zobrazení, nastavte hodnotu vlastnosti v metóde GET pred tým, ako model prejdete do zobrazenia.

Odporúčame tiež, aby váš model zobrazenia obsahoval vlastnosť IEnumerable<SelectListItem> TipoviDepozita a že vygenerujete SelectList v regulátore

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

takže pohľad sa stáva

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

1 pre odpoveď č. 2

Keď deklarujete vo svojom modeli, uistite sa, že vaša hodnota vráteného výberu je reťazec a nie a int.

Príklad:

public class MyModel
{
public string TipPopustaId { get; set; }
}

0 pre odpoveď č. 3
public static class EnumHelper
{
public static SelectList EnumToSelectList<TEnum>(this Type enumType, object selectedValue)
{
new SelectList(Enum.GetValues(enumType).Cast<TEnum>().ToList().ToDictionary(n=> n), "Key", "Value", selectedValue);
}
}

A podľa vášho názoru:

@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" })

Namiesto EnumToList použite akýkoľvek iný zoznam a vyberte kľúč a hodnotu vašich vlastností zoznamu