2009-07-30 2 views
1

У меня есть следующий код, который предназначен для заполнения выпадающего списка целым числом и сделать выбранное значение (в данном случае, 13) выбранным.SelectedItem не запоминается в SelectList в ASPNET.MVC

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

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

var x = new[] { 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; 

ViewData["Field"] = new SelectList(x, 13); 

Ввиду:

<%=Html.DropDownList("Field", (IEnumerable<SelectListItem>)ViewData["Field"])%> 

Когда я отладки и смотреть ViewData [ "Field"] объект, у него есть SelectedValue из 13 и поэтому он должен быть до тех пор, пока все, что я вижу на странице, не будут отображаться на странице, это выпадающее меню со значениями от 1 до 15, но с 1 показом (ни один выбранный так не показывает первый)

Является ли это ошибкой или я делаю Что-то действительно глупое?

Благодаря

Graeme

ответ

4

Кажется, я припоминаю, что это на самом деле не использовать выбранное свойство элемента SelectList. Обычно у меня есть один элемент ViewData - список выбора, а другой - выбранное значение.

Контроллер:

var x = new[] { 1, 2,3,4,5,6,7,8,9,10,11,12,13,14,15 }; 
ViewData["Fields"] = new SelectList(x); 
ViewData["Field"] = 13; 

Посмотреть

<%= Html.DropDownList("Field", (IEnumerable<SelectListItem>)ViewData["Fields"]) %> 
+0

Пятно на - спасибо! Бог знает, почему это отличается от строковой версии, но ваше решение работает! Благодаря!! – Graeme

+0

Это правильный путь. Первым параметром является имя поля для присоединения значения, которое отличается от механизма, используемого для передачи данных selectlistitem. Используя тот же ключ, вы делаете двойной долг с небольшим количеством данных, и это не работает так хорошо. Однако я уверен, что он будет использовать выбранное свойство, если оно установлено. Однако это не будет установлено. – Mallioch

+0

Я должен помнить более раннюю версию кода. Я только что проверил, и он использует свойство Selected, но есть некоторые условия, при которых он сбросит выбранное свойство элемента на основе того, получает ли он данные из представления или нет. Мне нужно будет провести некоторое исследование того, является ли это по-прежнему лучшим способом обработки выпадающих списков или нет. – tvanfosson

0

Это происходит со мной! Я вытягивал свои волосы часами, но в конце концов понял это. В моем случае я создавал выпадающий список, как это:

<%= Html.DropDownList("bookId", Model.ProductMenu, new { onchange = "goToBook();" })%> 

И это не печать выбранного варианта. Но выпадающий прямо рядом с ним работает нормально:

<%= Html.DropDownList("segmentIndex", Model.SegmentMenu, new { onchange = "goToSegment();" })%> 

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

Разница была в самом представлении. «bookId» в моем приложении - это значение маршрута/querystring, а segmentIndex - нет. Простое изменение имени «bookId» в представлении «bookIdBLAH» зафиксировало это!