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>
Другие вопросы по тегам