Каков наилучший способ установить раскрывающийся список в разметке ASP.NET MVC? - PullRequest
4 голосов
/ 27 ноября 2008

У меня есть этот HTML ...

<select id="View" name="View">
   <option value="1">With issue covers</option>
   <option value="0">No issue covers</option>
 </select>

Это не позволит мне вставить такой код ...

<select id="View" name="View">
   <option value="1" <% ..logic code..%> >With issue covers</option>
   <option value="0" <% ..logic code..%> >No issue covers</option>
 </select>

Итак, каков наилучший способ выбрать один из них?

Обновление: Без использования помощников HTML.

Ответы [ 4 ]

7 голосов
/ 27 ноября 2008

«Лучший» подход, вероятно, заключается в использовании помощников:

var selectList = new SelectList(data, "ValueProp", "TextProp", data[1].ValueProp);
... Html.DropDownList("foo", selectList)

Где «данные» могут быть массивом анонимных типов, таких как:

var data = new[] {
  new {Key=1, Text="With issue covers"},
  new {Key=0, Text="No issue covers"}
};
// todo: pick the selected index or value based on your logic
var selectList = new SelectList(data, "Key", "Text", data[1].Key);
Writer.Write(Html.DropDownList("foo", selectList));

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

Обратите внимание, что в объявлении данных отсутствовали запятая и точка с запятой, что остановило его работу

1 голос
/ 27 ноября 2008

Я думаю, что помощники - лучший путь.

Если вы не передадите «выбранное значение» (4-й параметр в конструкторе SelectList), оно будет загружено из ModelState, если оно доступно. Это очень удобно, когда вы работаете с постбеками и хотите, чтобы MVC автоматически поддерживал состояние вашей формы при нагрузках. Вы можете установить условие, чтобы использовать переопределение только с параметром «selected value», если это первая загрузка, а затем оставить его MVC и HtmlHelpers для управления состоянием после этого.

Просмотр разметки:

<%= Html.DropDownList("RdfParser", ViewData["RdfParserTypes"] as SelectList) %>

Контроллер:

var rdfTypes = new[]
    {
        new { value = 0, text = "RDF/XML" },
        new { value = 1, text = "NTriples" },
        new { value = 2, text = "Turtle" },
        new { value = 3, text = "RDFa" }
    };
ViewData["RdfParserTypes"] = new SelectList(rdfTypes, "value", "text", rdfTypes[0]);
1 голос
/ 27 ноября 2008

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

<select id="View" name="View">
   <option value="1" <% if (something) { %> selected <% } %> >With issue covers</option>
   <option value="0" <% if (!something) { %> selected <% } %> >No issue covers</option>
</select>
0 голосов
/ 24 августа 2009

Смотрите этот пост в блоге, у меня это сработало

http://weblogs.asp.net/ashicmahtab/archive/2009/03/27/asp-net-mvc-html-dropdownlist-and-selected-value.aspx

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