2

我在 VB.Net 中使用 ASP.Net MVC 4,我已经看到了其他一些关于如何在 c# 中为可空布尔值制作复选框的其他答案。通常转换为 VB.Net 非常简单。这个我想不通。

其他答案说要这样做..

在我的 EditorTemplates 文件夹中创建一个 Boolean.cshtml 并粘贴

@model bool?    
@Html.CheckBox("", Model.GetValueOrDefault())

所以,我尝试了 VB 等价物,在 EditorTemplates 文件夹中我制作了 Boolean.vbhtml 并把它

@model System.Nullable(of Boolean)
@Html.CheckBox("", Model.GetValueOrDefault)

那么在我看来我有

@Html.EditorFor(Function(x) x.myNullableBool)

该代码引发此异常:

未设置对象变量或 With 块变量。

我在几个不同的地方发现了与此处发布的内容非常相似的 c# 示例。有谁知道如何让它在 VB.Net 中工作?

编辑

这就是我正在尝试做的事情(如果它有效,那就更好了)

@model System.Nullable(of Boolean)
@Html.CheckBox("", If(Model is Nothing, False, Model))
4

1 回答 1

3

AnHTML checkbox有 2 个状态:

  • 检查
  • 未经检查

翻译成 .NETboolean类型术语意味着:

  • 真的
  • 错误的

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

  • 无(C# 中为空)
  • 真的
  • 错误的

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

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

否则,您总是可以拥有一个~/Views/Shared/EditorTemplates/Boolean.vbhtml包含以下内容的自定义编辑器模板:

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

但是,如果您正确设计视图模型(即匹配视图的要求),则不需要这些技巧。

于 2012-12-20T21:58:36.553 回答