Установка выбранной опции в MVC3

#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>