1

我有一个 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 = "已检查"

但它不起作用(选择了任何单选按钮值)。请指教。

4

2 回答 2

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 标记中为 all 设置属性。

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

于 2018-06-24T16:59:43.053 回答
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>
于 2018-06-24T17:16:55.467 回答