RadiobuttonFor和可为null的布尔检查属性问题

时间:2018-06-24 16:08:53

标签: asp.net-mvc radiobuttonfor

我有一个MVC视图模型,其中具有可为空的布尔属性:

[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 个答案:

答案 0 :(得分:1)

使用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"/>
}

在这里,我们为HTML标记中的所有属性设置checked属性。

另一个选择是将控件从3个单选按钮切换到2个复选框。您可以将所有标记都标记为最初已选中,并且用户可以根据需要选择/取消选择。另一个选择是使用这3个值将您的类型从bool?更改为枚举。通过这两种方法,通过使用CheckBoxForRadioButtonFor帮助程序,您应该能够在GET操作方法中设置需要检查的项目。使用更适合您的代码结构/样式的代码。

答案 1 :(得分:1)

我通过用RadioButton替换RadiobuttonFor来做到这一点:

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