RadiobuttonFor и nullable bool проверили свойство - PullRequest
0 голосов
/ 24 июня 2018

У меня есть MVC View Model, в которой у меня есть логическое свойство, допускающее обнуляемое значение:

[DisplayName("Is Active")]
public bool? IsActive { get; set; }

View:

<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 ]

0 голосов
/ 24 июня 2018

Я сделал это, заменив 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>
0 голосов
/ 24 июня 2018

Вы не можете передать 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. Используйте тот, который больше соответствует вашей структуре / стилю кода.

...