Я создаю selectList в своем контроллере для отображения в представлении.
Я пытаюсь создать это на лету, вроде того ... вот так ...
myViewData.PageOptionsDropDown =
new SelectList(new [] {"10", "15", "25", "50", "100", "1000"}, "15");
Компилируется, но вывод плохой ...
<select id="PageOptionsDropDown" name="PageOptionsDropDown">
<option>10</option>
<option>15</option>
<option>25</option>
<option>50</option>
<option>100</option>
<option>1000</option>
</select>
Обратите внимание, как не выбран ни один элемент?
Как я могу это исправить??
c#
asp.net-mvc
selectlist
Pure.Krome
источник
источник
Ответы:
Вот как я это делаю
На второй взгляд я не уверен, что знаю, что вам нужно ...
источник
SelectList sList = new SelectList(selectList, "Text", "Value", selected);
гдеselected
текущий выбранный покупательЯ использую метод расширения:
использование
с участием
источник
Используя конструктор, который принимает в
items, dataValueField, dataTextField, selectedValue
качестве параметров:Тогда, на ваш взгляд:
источник
Основываясь на ответе Томаса Стока, я создал эти перегруженные
ToSelectList
методы:В вашем контроллере вы можете сделать следующее:
И, наконец, в вашем представлении поместите:
Это приведет к желаемому результату - конечно, вы можете не
"(Select one)"
указывать параметр optionLabel выше, если вам не нужен первый пустой элемент:Обновление: пересмотренный список кода можно найти здесь с комментариями XML.
источник
Проблема в том, что SelectList работает так, как задумано. Ошибка в дизайне. Вы можете установить свойство Selected в SelectedItem, но это будет полностью проигнорировано, если вы пройдете по списку с помощью GetEnumerator () (или если Mvc сделает это за вас). Вместо этого Mvc создаст новые SelectListItems.
Вы должны использовать SelectList ctor с SelectListItem [], Text-Name, Value-Name и SelectedValue. Помните, что в качестве SelectedValue нужно передавать ЗНАЧЕНИЕ SelectListItem, которое вы хотите выбрать, а не сам SelectListItem! Пример:
(не тестировал это, но у меня была такая же проблема)
то второй вариант получит атрибут selected = "selected". Это похоже на старые добрые DataSets ;-)
источник
Это вариант:
источник
Если это буквально все, что вы хотите сделать, то простое объявление массива в виде строки устраняет проблему с выбранным элементом:
источник
Заставить SelectList и SelectedValue работать вместе очень просто, даже если ваше свойство не является простым объектом, таким как значение типа Int, String или Double.
Пример:
Предположим, что наш объект Region выглядит примерно так:
И ваша модель просмотра выглядит примерно так:
Вы можете получить код ниже:
Только если вы переопределите метод ToString объекта Region на что-то вроде:
У этого есть 100% гарантия на работу.
Но я действительно считаю, что лучший способ заставить SelectList 100% работать во всех сферах - это использовать метод Equals для проверки значения свойства DropDownList или ListBox для каждого элемента в коллекции элементов.
источник
Кажется, что если у вас строго типизированное представление, вам нужно изменить идентификатор раскрывающегося списка, чтобы он НЕ был именем свойства в унаследованном классе. Затем вам нужно добавить некоторую логику в свой метод редактирования (POST), чтобы извлечь выбранное значение из FORMCollection и поместить его в свой экземпляр перед фиксацией ваших изменений.
Это, конечно, немного странно, но я попробовал, и это работает.
Итак, если у вашего класса есть поле с названием CountryId, скажем, и вы показываете список названий стран, сделайте раскрывающийся список с идентификатором CountryName, а не CountryId, тогда в сообщении вы можете сделать что-то с Collection ["CountryName"] ,
источник
У меня была точно такая же проблема. Решение простое. Просто измените параметр «name», переданный помощнику DropDownList, на то, что не соответствует ни одному из свойств, существующих в вашей ViewModel. подробнее здесь: http://www.dotnetguy.co.uk/post/2009/06/25/net-mvc-selectlists-selected-value-does-not-get-set-in-the-view
Цитирую Дэна Ватсона:
ура!
источник
Все эти ответы выглядят великолепно, но похоже, что контроллер подготавливает данные для представления в хорошо известном структурированном формате, а не позволяет представлению просто повторять IEnumerable <>, доставленный через модель, и создавать стандартный список выбора, а затем позволить DefaultModelBinder доставить выбранный элемент обратно вам с помощью параметра действия. Да нет, а почему бы и нет? Разделение забот, да? Кажется странным, чтобы контроллер создавал что-то настолько специфичное для UI и View.
источник
Просто:
источник
Я просто так запустил и никаких проблем не было,
и
это также сработало, если вы сделаете это,
и
источник
Используя ваш пример, это сработало для меня:
контроллер:
Посмотреть:
источник
источник
Я так делаю:
ToArray () решает проблемы.
источник
Если вы хотите передать какой-то случайный текст в свой DropDownList, например --Select -, вы можете легко сделать это с помощью этого кода:
источник
Возможно, у вас есть некоторая двусмысленность в ваших ViewData:
Взгляните сюда
источник
значение, выбранное в модели, используется вместо элемента по умолчанию. (Согласен, я не все сообщения прочитал)
источник
Я не могу вспомнить, как был настроен mvc 1, но похоже, что он хотел, чтобы список выбора был таким же, как и поле, которому он принадлежал ...
Я обнаружил, как кто-то сказал выше, что мои списки выбора не работали в mvc2, когда ViewData, в котором они были отправлены, называлась так же, как поле.
Например:
<%= Html.DropDownListFor((model => model.ForID), (SelectList)ViewData["ForName"]) %>
работает, когда
<%= Html.DropDownListFor((model => model.ForID), (SelectList)ViewData["ForID"]) %>
не работает, поскольку имя ViewData "ForID" имеет то же имя, что и поле, для которого оно работает
источник
Возможное объяснение состоит в том, что значение списка выбора, к которому вы привязываетесь, не является строкой.
Итак, в этом примере параметр «PageOptionsDropDown» является строкой в вашей модели? Потому что в противном случае выбранное значение в списке не будет отображаться.
источник
Если вы посмотрите исходный код для MVC 2 в методе расширения Html.DropDownList, он никогда не проверяет свойство SelectedValue класса SelectList. Он будет только когда-либо пытаться сопоставить с вашей моделью.
Все вышеперечисленное - это все вариации темы, то есть как вы отправляете кучу данных в представление для раскрывающегося списка, и все они так же хороши, как друг друга (более или менее).
Проблема в представлении. Либо создайте свой собственный метод расширения DropDownList, который учитывает установленное вами значение select, либо выполните итерацию вручную. Что лучше всего подходит для вас.
источник
Если у вас есть коллекция в вашей модели и ваше представление строго типизировано, некоторые варианты этого будут работать:
-или-
источник