#c# #asp.net-mvc #razor
#c# #asp.net-mvc #razor
Вопрос:
У меня есть модель, которую я привязываю к представлению, которое отлично работает для всех элементов моей модели, за исключением bool? Участники.
Мое представление — это, по сути, всплывающее окно с фильтром поиска, в котором пользователи могут либо выбрать фильтрацию наших записей по:
- Имеет phone (они установят флажок в true)
- У него нет телефона (они оставят флажок снятым)
- Не имеет значения, делают они это или нет (вот почему мне нужен третий вариант для этого)
Технически элемент bool моей модели будет иметь либо true
, false
либо null
В моем коде, если пользователь не установил флажок, по умолчанию он установлен на false
, если они ставят флажок, то он устанавливается на true
Как я могу подойти к этой проблеме?
@Html.LabelFor(m => m.hasphone, "Has Phone ", new { @class = "control-label" })
@Html.CheckBoxFor(m => hasphone, new { htmlAttributes = new { @class = "form-control", value = Model.id, @checked = false } })
Комментарии:
1. Вы можете использовать переключатели или создать свой собственный помощник, как показано здесь
2. вам нужно сделать ваше свойство обнуляемым. поставьте лайк
public bool? HasPhone {get;set;}
и затем установите значение вnull
Ответ №1:
Это потому, что флажок или RadioButton, если уж на то пошло, имеют только два состояния: checked или unchecked.
в вашем описании кажется, что у него нет телефона или не имеет значения, оставьте флажок в любом случае, так зачем вам нужен третий вариант?
Если вы действительно хотите 3 варианта, используйте набор из трех переключателей, по одному для каждого варианта, или выпадающий список.
Комментарии:
1. Допустим, у нас есть 100 записей, 50 с телефоном и 50 без телефона, если он поставил галочку «Да с телефонами», то он получает 50, если он поставил галочку «Нет, только пожалуйста», тогда он получает 50. Если он хочет любой, то он получает 100
2. Есть 3 варианта, поэтому используйте переключатель.
3. Я бы использовал @Html.EditorFor(m=> m.HasPhone, новый { @class = «form-check-input», значение = m.HasPhone})
4. Да, переключатель, похоже, это то, что нужно, не знаю, почему я этого раньше не видел
Ответ №2:
Я, наконец, понял, как это сделать в Razor, на случай, если кто-нибудь застрянет
@Html.LabelFor(m => m.hasphone, "Has Phone ", new { @class = "control-label" })
<fieldset id="hasphone">
<label><input type="radio" name="hasphone" class="form-control" value="true" />Yes</label>
<label><input type="radio" name="hasphone" class="form-control" value="false" />No</label>
<label><input type="radio" name="hasphone" class="form-control" />Any</label>
</fieldset>
Идея состоит в том, чтобы создать группу, содержащую 3 параметра, назовите свою группу тем же именем, что и имя свойства <fieldset id="hasphone">
Затем установите для имени radiobutton значение имени группы name="hasphone"
, и, наконец, первая переключающая кнопка будет иметь значение true, value="true"
которое соответствует значению элемента модели true
, false соответствует false
И, наконец, не устанавливая значение третьего переключателя, вы получаете нулевое значение