超文本标记语言复选框返回值不是真/假



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

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

@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,但这样我就失去了所有不显眼的验证。

有什么办法解决这个愚蠢的问题吗?

复选框的数量是动态的,所以为每个值添加一个属性并不能削减它。

这似乎很荒谬,但你只能从MVC复选框返回true/false吗?

我不觉得可笑。再仔细想想,用布尔变量来建模选中/未选中状态实际上是有意义的。

为什么!

因为框架的设计者就是这样决定实现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以及它们是否被选中的collection属性。

最新更新