视图生成错误消息:字符串未被识别为有效的布尔值

本文关键字:识别 有效 布尔值 字符串 错误 消息 视图 | 更新日期: 2023-09-27 18:26:33

在一个管理页面中,我最初在一个视图中生成了几个复选框,如下所示:

型号:

public class Foo
{
    public const string Bar = "SomeString";
}

视图:

@Html.CheckBox(Foo.Bar)
@Html.Label(Foo.Bar)

然而,我想更改几个复选框的显示名称,所以我创建了一个视图模型(稍后添加显示名称属性):

public class FooViewModel
{
     public string Bar
     {
         get { return Foo.Bar; }
     }
}

并修改了视图:

@Html.CheckBox(Model.Bar)
@Html.LabelFor(m => m.Bar)

但是,视图现在在呈现复选框时生成错误:

字符串未被识别为有效的布尔

请注意,如果将视图模型中的特性名称更改为"条形"以外的任何名称,则视图将正确呈现。例如:

public class FooViewModel
{
     public string WTF
     {
         get { return Foo.Bar; }
     }
}
@Html.CheckBox(Model.WTF)
@Html.LabelFor(m => m.WTF)

如果我的viewmodel属性被命名为"Bar",有人能向我解释为什么会出现这个错误吗?

编辑:我稍微更新了一下我的问题,看看我是如何产生一些困惑的。该视图用作搜索表单,复选框仅用于选择"搜索标准"。

我以这种方式生成复选框,因此复选框的名称/id与控制器中相应的业务逻辑相关。

我知道,如果同一类中的属性名/字段名相同,代码将不会编译。这不是问题所在,因为我只是从不同名称空间中的常量初始化一个属性。

视图生成错误消息:字符串未被识别为有效的布尔值

不能有名为Bar的常量和名为Bar:的属性

public class Foo
{
    public const string Bar = "SomeString";
    public string Bar
    {
        get { return Foo.Bar; }
    }
}

这个特定的代码片段是无效的C#,甚至不会编译。

也就是说,ASP.NET MVC中的CheckBox/CheckBoxFor助手使用布尔值。所以我真的不明白为什么你甚至试图将它绑定到一个字符串属性以及这个Bar字符串常量的用途。

正确的方法是使用以下视图模型:

public class MyViewModel
{
    [Display(Name = "som estring")]
    public bool MyBoolValue { get; set; }
}

在强类型视图中:

@Html.LabelFor(x => x.MyBoolValue)
@Html.CheckBoxFor(x => x.MyBoolValue)

使用不同的复选框构造函数可以解决问题:

@Html.CheckBox(Model.Bar, false)
@Html.LabelFor(m => m.Bar)