MVC5 – Как установить «selectedValue» в DropDownListFor Html helper

В этом вопросе говорится: Как установить selectedValue в помощнике DropDownListFor Html?

Пробовал большинство других решений, но никто не работал, поэтому я открываю новый вопрос.

Ничто из этого не помогло:

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

Я хотел бы избежать ручного создания SelectListItems или ViewModel только для списка, если это возможно.

Когда вы используете метод DropDownListFor() (или DropDownList() ) для привязки к свойству модели, его значение свойства, которое устанавливает выбранную опцию.

Внутри методы генерируют собственный IEnumerable и устанавливают свойство Selected на основе значения свойства, поэтому установка свойства Selected в вашем коде игнорируется. Единственный раз, когда его уважают, когда вы не привязываетесь к свойству модели, например, используя

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

Обратите внимание, что вы можете проверить исходный код , в частности SelectInternal() и GetSelectListWithDefaultValue() чтобы увидеть, как он работает подробно.

Чтобы отобразить выбранную опцию при первом представлении представления, установите значение свойства в методе GET перед тем, как передать модель в представление

Я также рекомендую, чтобы ваша модель просмотра содержала свойство IEnumerable TipoviDepozita и что вы SelectList в controllerе

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

поэтому вид становится

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

Убедитесь, что ваше возвращаемое значение выбора – это строка, а не и int, когда вы объявляете ее в своей модели.

Пример:

 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); } } 

И в вашем представлении:

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

Вместо EnumToList используйте любой другой список и выберите «Ключ и значение ваших свойств списка»

  • Установить отключить атрибут на основе условия для Html.TextBoxFor
  • Как создать Html-помощник, например Html.BeginForm
  • Бритва: декларативные HTML-помощники
  • Условный атрибут html с помощником Html
  • ASP.NET MVC DropDownListFor с моделью типа Список
  • Может ли имя ViewBag быть таким же, как имя свойства Model в DropDownList?
  • Давайте будем гением компьютера.