#asp.net-mvc
#asp.net-mvc
Вопрос:
Я пытаюсь настроить базовый выпадающий список для MVC:
@Html.DropDownListFor(modelItem => item.CheckerApproved, new SelectList(new SelectListItem { Text = "True", Value="1" } , new SelectListItem { Text = "False", Value="0"}))
Это, на мой взгляд, и то, что я хочу, — это базовый выпадающий список true
и false
со значениями 1
и 0
соответственно.
Я думаю, что часть, в которой я ошибаюсь, добавляет элементы в конструктор SelectList.
Может ли кто-нибудь помочь мне с этим?
Комментарии:
1. Потому что я в странном настроении … обычно вы хотите «Да» / «Нет» в пользовательском интерфейсе вместо не удобного для пользователя bool speak, но это зависит от вашего приложения. В любом случае, моя проблема решена — спасибо.
Ответ №1:
Попробуйте это:
@Html.DropDownListFor(modelItem => modelItem.CheckerApproved, new [] { new SelectListItem { Text = "True", Value="1" } , new SelectListItem { Text = "False", Value="0"} })
Ответ №2:
Для чего-то подобного почему бы вам просто не создать тег Select с параметрами в вашем представлении?
<select id='ddlTrueFalse' name='ddlTrueFalse'>
<option value='1'>True</option>
<option value='0'>False</option>
</select>
Затем в вашем действии добавьте параметр:
public ActionResult MyAction(string ddlTrueFalse)
{
//ddlTrueFalse will be "1" or "0"
}
Мне пришлось сделать несколько из них, и я на самом деле написал это как метод расширения для HtmlHelper, но он намного чище, его легко отлаживать и он быстрее для сайта в целом.
Комментарии:
1. В качестве альтернативы вы можете использовать EditorTemplate, предназначенный для свойства Bool…
2. Я знаю, может показаться неискренним, что вам нужно анализировать строку в bool; но на самом деле это все, что делает связующее MVC model, так что вы ничего не теряете и не выигрываете от сокрытия приведения.
Ответ №3:
Это уже существует — если вы это сделаете Html.EditorFor(model => model.MyBoolean)
, вы получите выпадающий список с True / False и значением по умолчанию Unset или аналогичным.
Комментарии:
1. Зависит от модели: если
MyBoolean
значение не равно нулю, вы получите флажок. В зависимости от того, что требуется, это потенциально лучший подход.2. Хороший момент — так привык использовать nullable, что теперь я забыл эту деталь.
Ответ №4:
Мне было трудно понять, как добавить «класс» в приведенный выше код, поэтому я поделился этим, пришлось заключить исходный выпадающий список в скобки, а затем добавить перегрузку
@Html.DropDownListFor(modelItem => modelItem.CheckerApproved, (new[] { new SelectListItem { Text = "True", Value = "1" }, new SelectListItem { Text = "False", Value = "0" } }), new { @class = "form-control" } )
@Html.DropDownListFor(modelItem => modelItem.CheckerApproved, (new[] { new SelectListItem { Text = "Selected", Value = "1" }, new SelectListItem { Text = "Not Selected", Value = "0" } }), new { @class = "form-control" } )
Я добавляю это в качестве дополнительной информации, поскольку это позволяет разработчику выбирать имя раскрывающегося списка, позволяя команде программистов по-прежнему принудительно вводить bool. Отделение формы от дизайна.
Комментарии:
1. Это работает, и вы можете стилизовать его с помощью класса CSS, не уверен, почему понижающий голос.