我有一个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 =“已选中”
,但是不起作用(选择了任何单选按钮值)。请告知。
答案 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?
更改为枚举。通过这两种方法,通过使用CheckBoxFor
或RadioButtonFor
帮助程序,您应该能够在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>