Выбранное значение MVC DropDownList не работает

Я использую MVC5.

У меня есть ViewBag для списка как

ViewBag.TitleList = new SelectList((new string[] { "Mr", "Miss", "Ms", "Mrs" }), contact.Title);
//contact.Title has selected value.

затем я попытался преобразовать массив в SelectListItem ( to no avail)

В представлении это выглядит так

@Html.DropDownListFor(model => model.Title, ViewBag.TitleList as SelectList, "Select")

также я пытался

@Html.DropDownList("Title", ViewBag.TitleList as SelectList, "Select")

Список загружается успешно, но файл Selected Value is Not selected. Как решить эту проблему?

Обновление Виновником был ViewBag.Title, совпадающий с моей моделью.Title. Переименовал свойство моей модели во что-то другое, и это сработало. Аргх!


person Ruchan    schedule 13.11.2014    source источник
comment
Использование @Html.DropDownListFor(), если значение model.Title равно (скажем) Miss, тогда будет выбран 2-й вариант (вам не нужен 2-й параметр в конструкторе SelectList). Убедитесь, что значение Title точно соответствует одному из значений параметра.   -  person    schedule 13.11.2014
comment
Да, значение в заголовке совпадает со значением в списке   -  person Ruchan    schedule 13.11.2014
comment
Возможно, это дубликат того поста. [Возможный дубликат][1] [1]: stackoverflow.com/questions/5858679/   -  person Tobias    schedule 13.11.2014
comment
Спасибо за обновление. Я потратил 30 минут, задаваясь вопросом, почему мой раскрывающийся список «Заголовок» не был выбран. Я никогда не знал, что это проблема до сегодняшнего дня - спасибо!   -  person VictorySaber    schedule 22.10.2015


Ответы (2)


Установите значение свойства Title в контроллере:

ViewBag.TitleList = new SelectList(new string[] { "Mr", "Miss", "Ms", "Mrs" });
viewModel.Title = "Miss"; // Miss will be selected by default

Другая возможная причина (и правильная, судя по комментариям ниже) заключается в том, что ViewData["Title"] переопределяется другим значением. Измените имя свойства Title на любое другое и все должно работать.

person Zabavsky    schedule 13.11.2014
comment
Title уже имеет значение при загрузке. это часть метода редактирования. - person Ruchan; 13.11.2014
comment
@Ruchan, тогда значение Title не соответствует одному из этих 4 значений (возможно, проверьте наличие пробелов), или вы пытаетесь сделать это в цикле - person ; 13.11.2014
comment
@Ruchan, случайно ли вы устанавливаете заголовок страницы, используя Title в качестве ключа: ViewBag.Title = "Edit"? Попробуйте изменить имя свойства на любое другое. - person Zabavsky; 13.11.2014
comment
Я подумал так же, изменил имя свойства модели и попробовал, но все равно - person Ruchan; 13.11.2014
comment
Хорошо, в конце концов это был ViewBag.Title ..... так безумно прямо сейчас. Отредактируйте свой ответ, чтобы я мог выбрать его как правильный. - person Ruchan; 13.11.2014

Когда значение не указано (например, «Id»), DropDownListFor иногда ведет себя неправильно. Попробуй это:

public class FooModel
{
    public int Id { get; set; }
    public string Text { get; set; }
}

var temp = new FooModel[] 
{
    new FooModel {Id = 1, Text = "Mr"}, new FooModel {Id = 2, Text = "Miss"},
    new FooModel {Id = 3, Text = "Ms"}, new FooModel {Id = 4, Text = "Mrs"}
                       };
ViewBag.TitleList = new SelectList(temp, "Id", "Text", 2);

РЕДАКТИРОВАТЬ: другое решение

var temp = new []
{
    new SelectListItem {Value = "Mr", Text = "Mr"}, new SelectListItem {Value = "Miss", Text = "Miss"},
    new SelectListItem {Value = "Ms", Text = "Ms"}, new SelectListItem {Value = "Mrs", Text = "Mrs"}
};
ViewBag.TitleList = new SelectList(temp, "Value", "Text", "Miss");
person Jose M.    schedule 13.11.2014
comment
Видите ли, Иван, когда вы решаете проблему самостоятельно, это называется решением. - person tozlu; 21.09.2017