Выпадающий список MVC для базового значения True False в представлении

#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, не уверен, почему понижающий голос.