RadiobuttonFor и nullable bool проверили свойство
У меня есть MVC View Model, в которой у меня есть логическое свойство Nullable:
[DisplayName("Is Active")]
public bool? IsActive { get; set; }
Посмотреть:
<div class="col-md-3">
<div class="row">
<label>@Html.LabelFor(model => model.IsActive)</label>
</div>
@Html.RadioButtonFor(model => model.IsActive, true, new {id = "IsIsActiveTrue" })
<label>Yes</label>
@Html.RadioButtonFor(model => model.IsActive, false, new {id = "IsIsActiveFalse" })
<label>No</label>
@Html.RadioButtonFor(model => model.IsActive, "", new {id = "IsIsActiveAll"})
<label>All</label>
</div>
По умолчанию я бы хотел выбрать Все при загрузке страницы. Я пытался добавить
@checked = "проверено"
но это не сработало (выбрано любое значение радиокнопки). Пожалуйста, порекомендуйте.
2 ответа
Ты не пройдешь NULL
в качестве значения для переключателя при использовании RadioButtonFor
вспомогательный метод. Если вы пройдете ""
в качестве значения вы не можете установить это в своем действии GET, так как тип вашей переменной bool?
не строка
Если вам абсолютно необходимы 3 радиокнопки с вашим текущим типом, вы можете просто написать чистый HTML-код для рендеринга. Пока ваш переключатель name
значение атрибута соответствует имени свойства модели представления, привязка модели будет работать нормально при отправке формы.
@using (Html.BeginForm("Search","Customer"))
{
<label>Active</label>
<input type="radio" name="IsActive" value="true"/>
<label>In Active</label>
<input type="radio" name="IsActive" value="false"/>
<label>All</label>
<input type="radio" name="IsActive" checked="checked" />
<input type="submit"/>
}
Здесь мы устанавливаем checked
атрибут для всех в разметке HTML.
Другим вариантом является переключение элементов управления с 3 переключателей на 2 флажка. Вы можете отметить все из них, отмеченные изначально, и пользователь может выбрать / отменить выбор по мере необходимости. Другой вариант - изменить тип с bool?
к перечислению с этими 3 значениями. С обоими из этих подходов, с использованием CheckBoxFor
или же RadioButtonFor
помощник, вы должны иметь возможность установить элементы, которые необходимо проверить, в вашем методе действия GET. Используйте тот, который больше соответствует вашей структуре / стилю кода.
Я сделал это, заменив RadiobuttonFor на RadioButton:
<div class="row">
<label>@Html.LabelFor(model => model.IsActive)</label>
</div>
<div class="row col-md-12">
@Html.RadioButton("IsActive", true, false) Yes
@Html.RadioButton("IsActive", false, false) No
@Html.RadioButton("IsActive", null, true) All
</div>