MVC DropDownListFor() Выбранный элемент не выбран/требуется Проверка не выполняется

У меня возникли проблемы с получением моего DropDownList, чтобы установить выбранный элемент в значение из модели.

Поле в модели - это просто строка для названия имени пользователя (Mr, Miss и т.д.). Ниже приведен мой код.

<td>
@{ var list = new List<SelectListItem>(new[] {                    
    new SelectListItem{ Selected = string.IsNullOrEmpty(Model.Title), Text="",Value=""},
    new SelectListItem{ Selected = Model.Title.Equals("Mr"), Text="Mr",Value="Mr"},
    new SelectListItem{ Selected = Model.Title.Equals("Mrs"),   Text="Mrs",Value="Mrs"},
    new SelectListItem{ Selected = Model.Title.Equals("Miss"), Text="Miss",Value="Miss"},
    new SelectListItem{Selected = Model.Title.Equals("Ms"), Text="Ms",Value="Ms"}       
    });
}
@Html.DropDownListFor(m=>m.Title, list)
</td>

Ответ 1

Итак, получается, что единственная причина, по которой он не работает, - это то, что мое имя поля - Title, я изменил его на Prefix и мой точный код работает. Слишком много времени, потраченного на то, чтобы выяснить это...

Вот рабочий код.

<td>
    @{ var list = new List<SelectListItem>(new[] {
        new SelectListItem { 
            Selected = string.IsNullOrEmpty(Model.Prefix), 
            Text="",
            Value=""
        },
        new SelectListItem { 
            Selected = Model.Prefix.Equals("Mr"), 
            Text="Mr",
            Value="Mr"
        },
        new SelectListItem {
            Selected = Model.Prefix.Equals("Mrs"),
            Text="Mrs",
            Value="Mrs"
        },
        new SelectListItem {
            Selected = Model.Prefix.Equals("Miss"), 
            Text="Miss",
            Value="Miss"
        },
        new SelectListItem {
            Selected = Model.Prefix.Equals("Ms"), 
            Text="Ms",
            Value="Ms"
        }       
      });
    }
    @Html.DropDownListFor(m => m.Prefix, list)
</td>

Ответ 2

У меня была эта проблема с MVC 3, и оказалось, что я установил ViewBag.Title в моем представлении (используя его для названия страницы). Как только я изменил его на ViewBag.PageTitle, код выпадающего списка начал работать: @Html.DropDownListFor(model => model.Title, Model.MySelectList)

Причиной этого является то, что в MVC 2/3 любые свойства ViewBag/ViewData с тем же именем, что и в объекте Model, используются в предпочтении в DropDownListFor(), поэтому вам нужно переименовать их, чтобы убедиться, что они не конфликтуют. Поскольку это кажется действительно flaky, я просто прекратил использовать ViewBag полностью и теперь полагаюсь только на View Model для передачи материала в представление.

Причина, по которой эта проблема настолько распространена, заключается в том, что ViewBag.Title используется во многих вводных учебниках и демонстрационном коде для установки элемента заголовка HTML и поэтому неизбежно принимается как "лучшая практика", подход. Тем не менее, Заголовок является естественным именем свойства модели для использования в выпадающих списках в представлении "Сведения о пользователе".