/ / MVC5 - Як встановити "selectedValue" у DropDownListFor Html helper - asp.net-mvc, asp.net-mvc-5, html-helper

MVC5 - Як встановити "selectedValue" у DropDownListFor Html helper - asp.net-mvc, asp.net-mvc-5, html-helper

Як каже це питання: Як встановити selectedValue у DropDownListFor Html helper?

Випробували більшість інших рішень, але ніхто не працював, тому я відкриваю нове запитання.

Ніхто з них не допоміг:

@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 для списку, якщо це можливо.

Відповіді:

14 за відповідь № 1

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

Внутрішні методи породжують свої власні IEnumerable<SelectListItem> і встановіть Selected майно, що базується на вартості майна, і тому встановлюється Selected Властивість у вашому коді ігнорується. Єдиний час, коли його поважають, коли ви не зв'язуєтеся з властивістю моделі, наприклад, використовуєте

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

Зверніть увагу, що ви можете перевірити вихідний код, зокрема SelectInternal() і GetSelectListWithDefaultValue() методи, щоб побачити, як це працює в деталях.

Щоб відобразити вибрану опцію під час першого візуалізації вигляду, встановіть значення властивості в методі GET, перш ніж передавати модель до перегляду.

Я також рекомендую, щоб ваша модель перегляду містила властивість IEnumerable<SelectListItem> TipoviDepozita і що ви генеруєте SelectList в контролері

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

1 для відповіді № 2

Зверніть увагу, що значення вашого значення Return Selection є String, а не int, коли ви оголошуєте його у вашій моделі.

Приклад:

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

0 для відповіді № 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);
}
}

І у вашому перегляді:

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

Замість EnumToList скористайтеся будь-яким іншим списком і виберіть ключ і значення властивостей списку типів