c# - Html.CheckBox 返回值不正确/错误

标签 c# asp.net-mvc-3 checkbox

这看起来很可笑,但您只能从 MVC 复选框返回 true/false 吗?我记得以前(在经典的 asp 中)从勾选的复选框返回一个值是完全有效的,但微软似乎决定复选框应该只包含 true/false 值。

因此,如果您添加以下内容:

@Html.CheckBox("PropertyTypes", true, new {@value="A"})

我希望我的表单 POST 包含 Property=A ,我最终得到的是 Property=A&Property=true然后破坏模型所以我得到一个null在属性中而不是我想要的字符串中。

经调查发现,这是因为微软添加了一个额外的输入,所以 如果我不想检查输入,我会得到一个 false...非常感谢... ..:/

<input id="PropertyTypes" type="checkbox" value="Hotel" name="PropertyTypes" data-val-youmustselectatleastone="You must select at least one Property Type" data-val="true" checked="checked">
<input type="hidden" value="false" name="PropertyTypes">

为什么!

我可以只使用纯 HTML 自己编写输入代码,但随后我失去了所有不引人注目的验证。

关于如何解决这种愚蠢的问题有什么想法吗?

请注意,复选框的数量是动态的,因此为每个值添加一个属性不会削减它。

最佳答案

This seems ridicouous but can you only return true/false from an MVC checkbox?

我不觉得这很荒谬。当您重新考虑使用 bool 变量对选中/未选中状态进行建模实际上是有意义的。

WHY!

因为框架的设计者就是这样决定实现 CheckBox 助手的。

any ideas on how to get around this stupidity?

当然是通过使用 View 模型:

public class MyViewModel
{
    public int Id { get; set; }
    public bool IsChecked { get; set; }
}

然后假设您有一个集合,您将使用一个复选框和一个隐藏字段来存储项目的相应 ID:

@Html.HiddenFor(x => x.SomeCollection[i].Id)
@Html.CheckBoxFor(x => x.SomeCollection[i].IsChecked)

提交表单后,您将获得包含项目 ID 以及它们是否被选中的集合属性。

关于c# - Html.CheckBox 返回值不正确/错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16897725/

相关文章:

c# - IOFileNotFoundException mscorlib.dll

c# - 通过 wcf 服务调用时数据库连接不起作用

c# - 将值数组从 View 发送回 Controller

asp.net-mvc - 为什么 Asp.NET MVC 优于 Asp.NET Web 窗体

javascript - Kendo Panelbar - 在面板中添加复选框以选择多个面板标题

c# - 关闭来自不同进程的套接字/端口连接

c# - 根据数据库中存在的内容控制可见

asp.net-mvc - 不同语言的MVC数据注释?

python - 如何在 tkinter 中使用 SHIFT 选择多个复选框?

android - setOnItemClickListener 不适用于复选框?