MVC映射到模型中的可空bool

fea*_*net 13 c# data-binding nullable viewmodel asp.net-mvc-2

使用包含该字段的视图模型:

public bool? IsDefault { get; set; }
Run Code Online (Sandbox Code Playgroud)

尝试在视图中映射时出错:

<%= Html.CheckBoxFor(model => model.IsDefault) %>
Run Code Online (Sandbox Code Playgroud)

无法隐式转换类型'bool?' 'bool'.存在显式转换(您是否错过了演员?)

我已经尝试过铸造,使用.Value并且都没有工作.

请注意我想要的行为是提交表单应该IsDefault在模型中设置为true或false.值null仅表示尚未填充模型.

Joh*_*cek 15

问题是你真的有三个可能的价值观; true,false和null,因此CheckBoxFor无法处理三种状态(只有两种状态).

布拉德·威尔逊在他的博客讨论了这里.他使用DropDownList来获取可空的布尔值.

这个StackOverflow 问题在描述情况方面做得比我上面做得好得多.解决方案的缺点有时是可空的并不意味着错误,它应该是可以为空的.例如,您不希望应用true或false的过滤条件.


Jon*_*ter 8

如果您不关心null值,并且只想在复选框为null时取消选中该复选框,则可以执行以下操作:

在您的模型中创建bool类型的另一个属性,如下所示:

public bool NotNullableBool
{
    get
    {
        return NullableBool == true;
    }
    set
    {
        NullableBool = value;
    }
}
Run Code Online (Sandbox Code Playgroud)

然后用它来绑定......