如何在ASP.NET MVC中创建一个模型绑定的是/否单选按钮,该按钮在页面加载时未选择任何选项?

Mar*_*ell 3 asp.net html-helper model-binding razor asp.net-mvc-3

我的视图模型中有一个可以为null的布尔属性:

public class ViewModel
{
    [Required(ErrorMessage="Please select yes or no")]
    public bool? Completed { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望此属性的表单控件是一对单选按钮,在页面加载时最初没有选择任何选项.这是因为我们希望用户有意识地单击一个选项或另一个选项(而不是复选框,这很容易被忽略并保留为默认值).

布尔属性需要是可空的,因为否则在页面加载时已经检查了'NO'选项,正如我上面提到的那样,这不是我们想要的.但是,在视图中使用以下代码:

<label>@Html.RadioButton("Completed", Model.Completed) YES</label>
<label>@Html.RadioButton("Completed", !Model.Completed) NO</label>
Run Code Online (Sandbox Code Playgroud)

导致运行时错误,因为帮助程序尝试绑定到的模型属性为null.

我怎样才能实现这个最初未被选中的状态?

Dar*_*rov 6

试试这样:

<label>@Html.RadioButton("Completed", "true") YES</label>
<label>@Html.RadioButton("Completed", "false") NO</label>
Run Code Online (Sandbox Code Playgroud)

但是既然你已经有了一个视图模型,那么使用强类型的helper版本要好得多:

<label>@Html.RadioButtonFor(x => x.Completed, "true") YES</label>
<label>@Html.RadioButtonFor(x => x.Completed, "false") NO</label>
Run Code Online (Sandbox Code Playgroud)