ASP.NET MVC 4 - выбранное значение DropDown не работает

В моей 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. Почему он внезапно исчезает при рендеринге моего представления?


person CSharpBeginner    schedule 23.01.2016    source источник
comment
Вы можете попробовать добавить значение по умолчанию: stackoverflow.com/questions/7229626/   -  person jjh121    schedule 24.01.2016
comment
Что ты имеешь в виду? Я правильно заполняю список ‹SelectListItem›, всегда один из элементов получал Selected = true, но волшебным образом ни одна опция в представлении не имеет выбранного атрибута: / Вот что я хочу выяснить   -  person CSharpBeginner    schedule 24.01.2016
comment
Вы неправильно заполняете 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


Ответы (1)


Хорошо, я уже узнал результат. Мне просто нужно было изменить тип с Enum на int и правильно заполнить его. Все работает! :)

person CSharpBeginner    schedule 23.01.2016