VB.Net中的CheckBoxFor Nullable布尔值

时间:2012-12-20 19:38:27

标签: vb.net razor asp.net-mvc-4

我在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))

1 个答案:

答案 0 :(得分:3)

HTML checkbox有两种状态:

  • 检查
  • 选中

转换为.NET boolean类型术语,这意味着:

因此,尝试将视图模型上的Nullable布尔属性绑定到复选框几乎没有任何逻辑意义。可以为空的布尔值在.NET中有3个状态:

  • Nothing(C#中为null)

因为您可以看到复选框的HTML语义根本不适合您的视图模型类型。 Html.CheckBoxFor助手为什么需要一个布尔属性,而不是可以为空的布尔值,这并不奇怪。

因此,如果您想将视图模型属性的类型绑定到复选框,我建议您将视图模型属性的类型修改为不可为空的布尔值。

否则,您可以随时拥有~/Views/Shared/EditorTemplates/Boolean.vbhtml自定义编辑器模板,其中包含以下内容:

@ModelType Nullable(Of Boolean)
@Html.CheckBox("", If(Model.HasValue, Model.Value, False))

但是,如果您正确设计视图模型,以符合您的观点要求,则不需要这些黑客攻击。