2013-06-03 80 views
3

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

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

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

我希望我的表单POST包含Property=A,我结束了为Property=A&Property=true,然后打破模式,使我的财产得到null而不是我想要的字符串。

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

<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复选框的数量是动态的,所以为每个值添加一个属性不会削减它。

+1

什么问题? – khellang

+0

@KristianHellang如何从tickbox返回值?不是真的还是假的? – Liam

+0

选中/取消选中复选框,例如真假。当然你不想要一个下拉? ;) – khellang

回答

8

这似乎有些匪夷所思,但是你只能从MVC复选框返回true/false吗?

我不觉得这很荒谬。当你给它一个第二个想法时,用布尔变量建模一个checked/unchecked状态实际上是有意义的。

为什么!

因为这就是框架的设计者决定实现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) 

当表单提交时,您将获得包含项目标识的集合属性,以及是否选择了它们。

+0

因此,这违反了W3C标准... http://www.w3.org/TR/html401/interact/forms.html *表单中的多个复选框可能共享相同的控件名称。因此,例如,复选框允许用户为同一属性选择多个值。 INPUT元素用于创建复选框控件。* – Liam

+0

典型的ms解决方案..... – Liam

+0

不,这并不违反任何W3C标准。随意通过您的生成标记通过W3C验证程序,你会很高兴:-) –

相关问题