在管理页面中,我最初在视图中生成了几个复选框,如下所示:
型号:
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)
但是,在呈现复选框时,视图现在会生成错误:
字符串未被识别为有效的布尔值
注意,如果我将视图模型中的属性名称更改为“Bar”以外的任何内容,则视图将呈现为正确。 EG:
public class FooViewModel
{
public string WTF
{
get { return Foo.Bar; }
}
}
@Html.CheckBox(Model.WTF)
@Html.LabelFor(m => m.WTF)
如果我的viewmodel属性名为“Bar”,有人可以向我解释为什么会出现这个错误吗?
修改: 我已经稍微更新了我的问题,看到如何,我产生了一些混乱。该视图用作搜索表单,复选框仅用于选择“搜索标准”。
我正在以这种方式生成复选框,因此复选框的名称/ ID与控制器中相应的业务逻辑相关。
我知道如果同一个类中的属性名称/字段名称相同,代码将无法编译。这不是问题,因为我只是在不同的命名空间中从常量初始化属性。
答案 0 :(得分:1)
您不能拥有名为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)
答案 1 :(得分:0)
使用不同的复选框构造函数可以解决问题:
@Html.CheckBox(Model.Bar, false)
@Html.LabelFor(m => m.Bar)