#asp.net-mvc-3 #razor
#asp.net-mvc-3 #razor
Вопрос:
Итак, я могу зайти так далеко
string selectedOption = ViewBag.SelectedOption;
<select id="SelectedYear" name="SelectedYear">
<option value="2010">2010</option>//if(selectedOption == 2010)...meh...
<option value="2011">2011</option>
<option value="2012">2012</option>
<option value="2013">2013</option>
</select>
И я знаю, что могу сохранить SelectedOption
в a div
и установить выбранный параметр с помощью jQuery в сжатом виде после $(document).ready
.
Существует ли краткий метод для выполнения задачи с помощью прямого MVC3 / razor?
Ответ №1:
Что-то вроде:
int selectedOption = ViewBag.SelectedOption;
<select id="SelectedYear" name="SelectedYear">
<option value="2010" @(selectedOption == 2010 ? "selected" : "")>2010</option>
<option value="2011" @(selectedOption == 2011 ? "selected" : "")>2011</option>
<option value="2012" @(selectedOption == 2012 ? "selected" : "")>2012</option>
<option value="2013" @(selectedOption == 2013 ? "selected" : "")>2013</option>
</select>
При этом именно для этого и предназначен HtmlHelper.DropDownList.
Разместите свою логику внутри контроллера и просто передайте IEnumerable через ViewBag. На этом этапе вам просто нужно вызвать помощника в представлении:
@Html.DropDownList("optionName", ViewBag.MyOptionsList as IEnumerable<SelectListItem>)
Комментарии:
1. Условие должно быть для выбранного атрибута, а не для его значения: <значение параметра =»2010″ @(Выбранная опция == 2010 ? «выбрано»: «»)>2010</option>
2. Принятый ответ не сработал для меня, но решение Амра Элгархи сработало. Принятый ответ заканчивается тем, что в разметке вводится selected=»», что (по крайней мере, в IE) в любом случае приводит к выбору поля опций.
3. Этот код работает некорректно. Однако у Амра Элгархи все правильно. Этот код помещает атрибуты для всех параметров как selected=»» (и поскольку значение игнорируется, даже указанное Joao), все они рассматриваются как выбранные, и последний в списке отображается в выпадающем списке). Именно наличие атрибута в опции обеспечивает корректную работу кода в разных браузерах. Так что не обращайте внимания на сообщение и используйте код в первом комментарии, и вам повезет больше.
4. Попробуйте <значение параметра=»2010″ @(Выбранная опция == 2010 ? «выбрано=»выбрано»» : «»)>2010</ вариант>
5. У меня достаточно репутации, чтобы отредактировать ответ и исправить его в соответствии с комментариями @AmrElgarhy ! 🙂
Ответ №2:
TagHelper
не поддерживает код C # в своей области тегов.
Однако вы можете превратить option
элемент в обычный html-тег, используя !
символ.
Например:
<!option @(ViewBag.CurrrentPage == x ? "selected" : "")>@x<!/option>
Комментарии:
1. Не знал о ! для деактивации области тегов. Очень полезно, спасибо!
Ответ №3:
int selectedOption = ViewBag.SelectedOption;
<select id="SelectedYear" name="SelectedYear">
<option value="2010" @if(selectedOption == 2010){<text>selected="selected"</text>}>2010</option>
...
</select>
Комментарии:
1. Вывод html заканчивается тем, что выбирается = «выбрано», кому-нибудь повезло просто заставить razor выводить только выбранное слово?
Ответ №4:
Метод, на который дан правильный ответ, пока не работает, лучше использовать следующий пример:
<option value="someValie" @(ViewBag.someVariable == "someValue" ? "selected" : String.Empty)>...</option>