SelectList не показывает выбранный элемент - PullRequest
4 голосов
/ 21 декабря 2011

Это немного урезано, но по сути у меня есть модель, которая выглядит примерно так:

public class PersonCreateEditViewModel
{
   public string Title { get; set; }

   public IEnumerable<SelectListItem> Titles { get; set; }
}

и на своей странице редактирования я хочу отобразить текущий заголовок этого человека в DropDownList, такмы можем изменить их название.Этот код выглядит следующим образом:

@Html.DropDownListFor(model => model.Title, new SelectList(Model.Titles, "Value", "Text", Model.Title))

, и я заполняю его в своем действии, получая несколько строк:

IEnumerable<SelectList> titles = somelistoftitles.Select(
      c => new SelectListItem
      {
         Value = c,
         Text = c
      };


var viewModel = new PersonCreateEditViewModel()
{
    Title = model.Title,
    Titles = sometitles
};

return View(viewModel);

, и это заполняет DropDownList значениями, но нене выбрать текущий заголовок человека.Итак, я, очевидно, делаю что-то не так здесь.Глядя на основной html, я вижу, что атрибут selected не установлен для опции, соответствующей заголовку человека.Я подумал , что при указании Model.Title в качестве третьего аргумента его можно будет выбрать.

Идеи?


Обновление

Я добавил настройку свойства Selected, как предложено ниже qntmfred, и это установит значение true в списке, но у <option> нет атрибута selected.


решено

Итак, это было неуловимо.У меня просто получилась запись ViewBag с именем "Заголовок" - что-то вроде этого:

@{
    ViewBag.Title = "Edit Person"
}

, и это, очевидно, привело к тому, что выбор не работал, так как моя модель также имеет свойство "Заголовок".Я решил проблему, переименовав собственность.

Ответы [ 2 ]

4 голосов
/ 21 декабря 2011

решаемые

Как я писал в конце своего вопроса, это не было очевидным. У меня просто так получилось ViewBag запись с названием "Заголовок" - что-то вроде этого:

@{
    ViewBag.Title = "Edit Person"
}

и это, очевидно, привело к тому, что выборка не сработала, поскольку моя модель также имеет свойство "Заголовок". Я решил проблему, переименовав собственность.

Сегодня утром слишком много времени было потрачено на эту проблему.

Извлеченный урок.

1 голос
/ 21 декабря 2011

Вам необходимо установить свойство Selected на SelectListItem

IEnumerable<SelectList> titles = somelistoftitles.Select(
      c => new SelectListItem
      {
         Value = c,
         Text = c,
         Selected = (c.Equals(model.Title))
      };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...