我在VB.Net中使用ASP.Net MVC 4,我已经看到了一些关于如何在c#中为可以为空的布尔值设置复选框的其他答案。通常转换为VB.Net非常简单。我无法弄明白。
其他答案说这样做..
在我的EditorTemplates文件夹中创建一个Boolean.cshtml并坚持
@model bool?
@Html.CheckBox("", Model.GetValueOrDefault())
所以,我尝试了VB equivelent,在EditorTemplates文件夹中我制作了Boolean.vbhtml并把它放了
@model System.Nullable(of Boolean)
@Html.CheckBox("", Model.GetValueOrDefault)
然后在我看来我有
@Html.EditorFor(Function(x) x.myNullableBool)
该代码抛出此异常:
对象变量或未设置块变量。
我发现有几个不同的地方,非常相似的c#示例与此处发布的内容非常相似。有谁知道如何在VB.Net中使用它?
修改
这就是我想要做的事情(如果有效的话,那就更好了)
@model System.Nullable(of Boolean)
@Html.CheckBox("", If(Model is Nothing, False, Model))
答案 0 :(得分:3)
HTML checkbox
有两种状态:
转换为.NET boolean
类型术语,这意味着:
因此,尝试将视图模型上的Nullable布尔属性绑定到复选框几乎没有任何逻辑意义。可以为空的布尔值在.NET中有3个状态:
因为您可以看到复选框的HTML语义根本不适合您的视图模型类型。 Html.CheckBoxFor助手为什么需要一个布尔属性,而不是可以为空的布尔值,这并不奇怪。
因此,如果您想将视图模型属性的类型绑定到复选框,我建议您将视图模型属性的类型修改为不可为空的布尔值。
否则,您可以随时拥有~/Views/Shared/EditorTemplates/Boolean.vbhtml
自定义编辑器模板,其中包含以下内容:
@ModelType Nullable(Of Boolean)
@Html.CheckBox("", If(Model.HasValue, Model.Value, False))
但是,如果您正确设计视图模型,以符合您的观点要求,则不需要这些黑客攻击。