3

这看起来很荒谬,但你只能从 MVC 复选框返回真/假吗?我记得那天(在经典的 asp 中)从勾选的复选框返回一个值是完全有效的,但微软似乎决定复选框应该只包含真/假值。

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

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

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

经过调查,事实证明这是因为微软添加了一个额外的输入,所以如果我不想检查输入,我会得到一个错误......非常感谢......:/

<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 自己在输入中编码,但随后我失去了所有不显眼的验证。

关于如何解决这种愚蠢的任何想法?

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

4

1 回答 1

9

这看起来很荒谬,但你只能从 MVC 复选框返回真/假吗?

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

为什么!

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

关于如何解决这种愚蠢的任何想法?

当然通过使用视图模型:

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 以及它们是否被选中的集合属性。

于 2013-06-03T13:26:18.077 回答