Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 视图生成错误消息:字符串未被识别为有效的布尔值_C#_Asp.net Mvc_Asp.net Mvc 3_Razor_Viewmodel - Fatal编程技术网

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

C# 视图生成错误消息:字符串未被识别为有效的布尔值,c#,asp.net-mvc,asp.net-mvc-3,razor,viewmodel,C#,Asp.net Mvc,Asp.net Mvc 3,Razor,Viewmodel,在管理页面中,我最初在视图中生成了几个复选框,如下所示: 型号: public class Foo { public const string Bar = "SomeString"; } 视图: 但是,我想更改几个复选框的显示名称,因此我创建了一个视图模型(以便稍后添加显示名称属性): 并修改了视图: @Html.CheckBox(Model.Bar) @Html.LabelFor(m => m.Bar) 但是,视图现在在呈现复选框时生成错误: 字符串未被识别为有效的布尔值 请

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

型号:

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

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

并修改了视图:

@Html.CheckBox(Model.Bar)
@Html.LabelFor(m => m.Bar)
但是,视图现在在呈现复选框时生成错误:

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

请注意,如果我将视图模型中的属性名称更改为“Bar”以外的任何名称,则视图将正确呈现。例如:

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

@Html.CheckBox(Model.WTF)
@Html.LabelFor(m => m.WTF)
如果我的viewmodel属性名为“Bar”,有人能解释为什么会发生此错误吗

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

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


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

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

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

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

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

    public string Bar
    {
        get { return Foo.Bar; }
    }
}
这个特定的代码片段是无效的C#,甚至无法编译

也就是说,ASP.NET MVC中的
复选框/CheckBoxFor
帮助程序使用布尔值。所以我真的不明白你为什么要把它绑定到一个字符串属性上,以及这个
字符串常量的用途

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

public class MyViewModel
{
    [Display(Name = "som estring")]
    public bool MyBoolValue { get; set; }
}
在强类型视图中:

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

@ChrisF不,这个参数应该是一个字符串:@Shark-啊,谢谢-我已经有一段时间没有做这件事了。注释已删除。您是否将该属性作为静态属性引用?那是怎么编译的?@Shark是的,没错。只要“视图模型”的属性名与基础模型中的支持常量字符串的属性名不同,所有内容都可以正常工作/编译。我仍然不明白您试图做什么。复选框需要绑定到
bool
,而不是字符串。您应该执行
@Html.CheckBoxFor(model=>model.SomeBooleanProperty)
谢谢Darin,我已经稍微更新了我的问题,以避免造成混淆。属性只是从不同命名空间中的类的常量值初始化。根据您的示例,它们不在同一个类中。
public class MyViewModel
{
    [Display(Name = "som estring")]
    public bool MyBoolValue { get; set; }
}
@Html.LabelFor(x => x.MyBoolValue)
@Html.CheckBoxFor(x => x.MyBoolValue)