В моей ViewModel у меня есть два поля:
public AdTypeEnum Type { get; set; }
public IList<SelectListItem> TypeEnumList { get; set; }
Вот как я заполняю список:
public void SetLists()
{
TypeEnumList = new List<SelectListItem>();
TypeEnumList.Add(new SelectListItem { Value = "0", Text = "Select the type"});
foreach (var en in Enum.GetValues(typeof(AdTypeEnum)).Cast<AdTypeEnum>())
{
TypeEnumList.Add(new SelectListItem
{
Value = ((int)en).ToString(),
Text = en.ToString(),
Selected = Type == (AdTypeEnum)en ? true : false
});
}
}
А затем я просто визуализирую раскрывающийся список в своем представлении:
@Html.DropDownListFor(x => x.Type, Model.TypeEnumList, new { @class = "form-control" })
Но выбранное значение не отображается, и всегда выбирается первый вариант. Когда я проверяю выбор в HTML, я обнаружил, что ни один из параметров не получил атрибут selected, но когда я отлаживаю свой метод контроллера, я вижу, что всегда один из selectListItem имеет свойство Selected = true. Почему он внезапно исчезает при рендеринге моего представления?
SelectList
. Не добавляйте первую опцию (сvalue="0')
) - вы добавляете опцию метки, используя правильную перегрузку -@Html.DropDownListFor(x => x.Type, Model.TypeEnumList, "Select the type", new { .. })
, которая генерирует значениеnull
. И в цикле это должно бытьValue = en.ToString(),
и, наконец, установка свойстваSelected
дляSelectListItem
бессмысленна при привязке к свойству. Его значениеType
, которое определяет, какая опция выбрана (свойствоSelected
игнорируется методомDropDownListFor()
- person   schedule 27.01.2016