HTML.DropDownList не учитывает предварительно выбранное значение - PullRequest
3 голосов
/ 20 декабря 2009

Я хочу использовать Html.DropDownList (имя строки, IEnumerable SelectList, Object htmlAttributes), чтобы отобразить список выбора с предварительно выбранным значением для меня.

Мой список выбора находится в модельном объекте моего обзора, поэтому я писал следующий код:

<%= Html.DropDownList("aName", mySelectList, new { }) %>

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

Обходной путь, который я нашел, передает SelectList как ViewData и делает следующее:

В контроллере:

ViewData["TimeZones"] = mySelectList;

В виде:

<%= Html.DropDownList("TimeZones", null, new { }) %> 

Таким образом, список выбора будет отображаться с предварительно выбранным значением, однако я не хочу, чтобы меня заставляли передавать мой список выбора в качестве данных просмотра. Что я делаю неправильно? Спасибо заранее за вашу помощь.

Ответы [ 3 ]

3 голосов
/ 05 октября 2010

Вы можете просто сделать это (это работает):

<%: Html.DropDownList("DropdownName", new SelectList(ListItems, "Value", "Text", selectedItem), htmlAttributes)%>

Дайте мне знать, если это не сработает.

1 голос
/ 20 декабря 2009

Автосвязывание выбранного элемента

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

В контроллере вы делаете то же самое, что и раньше, просто не устанавливайте в true свойство Selected любого элемента. Затем вы также должны указать в модели представления значение элемента, который хотите выбрать.

var model = new IndexViewModel()
            {
                ListItems = items,
                SelectedItem = 2
            };

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

<%= Html.DropDownList("SelectedItem", Model.ListItems) %>

Единственная разница в отображаемом HTML заключается в том, что при первом подходе имя элемента выбора HTML - ListItems, а при втором - SelectedItem.

Эти подходы хороши, если вы создаете свой собственный список, но они не являются оптимальным решением, если вы получаете список опций для внешнего метода, например, из хранилища БД.

Взгляните на эту ссылку

0 голосов
/ 10 октября 2015

Я знаю, что это старый пост, но я столкнулся с подобной проблемой в MVC5. Решение простое, но я некоторое время боролся с ним, поэтому подумал, что поделюсь.

VS автоматически создает DropDownLists с этим в представлении:

@Html.DropDownList("EpisodeTypeId", null, htmlAttributes: new { @class = "form-control" })

В контроллере VS автоматически генерирует код ViewBag по-разному для создания и редактирования.

Вот код из создания:

ViewBag.EpisodeTypeId = new SelectList(db.EpisodeTypes, "Id", "Name");

А из редактирования:

ViewBag.EpisodeTypeId = new SelectList(db.EpisodeTypes, "Id", "Name", episode.EpisodeTypeId);

Этот четвертый аргумент важен для правок, как и следовало ожидать. Если вы пропустите это, значение базы данных для этой записи не будет предварительно выбрано в DropDown.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...