Html.CheckBox返回值不是true/false

Lia*_*iam 3 c# checkbox asp.net-mvc-3

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

所以如果你添加以下内容:

@Html.CheckBox("PropertyTypes", true, new {@value="A"})
Run Code Online (Sandbox Code Playgroud)

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

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

<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">
Run Code Online (Sandbox Code Playgroud)

为什么!

我只能使用平面HTML编写输入,但后来我放弃了所有不引人注目的验证.

关于如何摆脱这种愚蠢的想法?

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

Dar*_*rov 9

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

我觉得这很荒谬.当你给它第二个想法建模一个布尔变量的检查/未检查状态实际上是有道理的.

为什么!

因为这就是框架的设计者决定实现CheckBox帮助器的方式.

关于如何摆脱这种愚蠢的想法?

通过使用视图模型当然:

public class MyViewModel
{
    public int Id { get; set; }
    public bool IsChecked { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

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

@Html.HiddenFor(x => x.SomeCollection[i].Id)
@Html.CheckBoxFor(x => x.SomeCollection[i].IsChecked)
Run Code Online (Sandbox Code Playgroud)

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

  • 前进.你也可以在你的信中说一句欢迎,并告诉他们在下一个版本中删除ViewData/ViewBag :-) (6认同)
  • 谢谢你的回答......我出于某种原因对此感到很生气....我可能会写一封生气的信......我会教他们的!:) (2认同)