У меня есть этот 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.





"Лучшим" подходом, вероятно, является использовать помощников:
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));
Другой подход может заключаться в выборе правильного элемента на стороне клиента с помощью сценария, но, очевидно, он работает только с включенным сценарием.
Обратите внимание, что в объявлении данных отсутствовали запятая и точка с запятой, что мешало ему работать
Я бы согласился с Марком в использовании помощников, но если вы должны избегать их, вы можете попробовать что-то вроде следующего:
<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>
Я пробовал что-то подобное, но это не сработало. Я попробовал ваш код, и он сработал! Я должен сделать что-то не так. Поскольку IDE забавно выделяет это, я подумал, что вы не можете разместить там разметку. Очевидно, я ошибался. Спасибо!!
Я думаю, что помощники - лучший выход.
Если вы не передадите «выбранное значение» (4-й параметр в конструкторе SelectList), оно будет загружено из ModelState, если оно доступно. Это очень удобно, когда вы имеете дело с обратной связью и хотите, чтобы MVC автоматически поддерживал состояние вашей формы при загрузке. Вы можете установить условие, чтобы использовать переопределение с параметром «выбранное значение» только в том случае, если это первая загрузка, а затем оставить это для 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]);
См. Это сообщение в блоге, у меня это сработало
Нам может понадобиться увидеть этот «логический код», чтобы помочь вам.