MVC映射到模型中的可空bool
使用包含该字段的视图模型:
public bool? IsDefault { get; set; }
尝试在视图中映射时出错:
model.IsDefault) %>
无法隐式转换类型’bool?’ ‘bool’。 存在显式转换(您是否错过了演员?)
我已经尝试过使用.Value
并且都没有工作。
请注意我想要的行为是提交表单应该将模型中的IsDefault
设置为true或false。 值null
仅表示尚未填充模型。
问题是你真的有三个可能的价值观; true,false和null,因此CheckBoxFor无法处理三种状态(只有两种状态)。
布拉德威尔逊在他的博客上讨论。 他使用DropDownList来获取可空的布尔值。
这个StackOverflow 问题比我上面描述的情况要好得多。 解决方案的缺点有时是可空的并不意味着错误,它应该是可以为空的。 例如,您不希望应用true或false的过滤条件。
如果您不关心null值,并且只想在复选框为null时取消选中该复选框,则可以执行以下操作:
在您的模型中创建另一个bool类型的属性,如下所示:
public bool NotNullableBool { get { return NullableBool == true; } set { NullableBool = value; } }
然后用它来绑定……
对我来说,这要好得多:
<%= Html.CheckBox("IsDefault", Model.IsDefault.HasValue? Model.IsDefault : false) %>
这是如何映射一个可膨胀的布尔bool?
DropDownListFor
属性:
@model SomeModel @Html.DropDownListFor(m => m.NullableBooleanProperty, new SelectList( new[] { new { Value = "", Text = "-- Choose YES or NO --" }, new { Value = "true", Text = "YES" }, new { Value = "false", Text = "NO" }, }, "Value", "Text" ))
以下是使用非可空代理属性作为解决方法将其映射到CheckBoxFor
的方法:
在ViewModel中:
public bool NullableBooleanPropertyProxy { get { return NullableBooleanProperty == true; } set { NullableBooleanProperty = value; } }
在视图中:
@model SomeModel @Html.CheckBoxFor(m => m.NullableBooleanPropertyProxy)
此解决方法的唯一缺点是null
值将被视为false
:如果您不能接受,则最好使用可支持三种状态的控件,例如前面提到的DropDownListFor
。
有关详细信息,请在我的博客上阅读此文章 。
要添加到vapcguy答案,另一种更“清洁”的方法就是如下
@Html.CheckBox("IsDefault", Model?.IsDefault)
要么
<%= Html.CheckBox("IsDefault", Model?.IsDefault) %>
您可以创建一个编辑器模板来呈现可为空的布尔值的复选框。 将模板命名为Boolean.cshtml,以将其用作站点中所有布尔属性的默认值。 确保该文件位于〜/ Views / Shared / EditorTemplates文件夹中
上述就是C#学习教程:MVC映射到模型中的可空bool分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
@model bool? @Html.CheckBox(String.Empty, Model??false)
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/984561.html