如何将表单中的复选框序列化为Json数据

Bla*_*ise 5 checkbox asp.net-mvc json jsonserializer

我们知道在MVC中,a CheckBoxFor将生成一个checkbox带a value="true"和a hidden带a value=false.两个输入控件将共享相同的名称.

这是非常合理的,因为如果未选中该框,表单将能够POST一个假值.当复选框返回true时,模型绑定器将忽略隐藏的输入.

但是现在我已经覆盖了表单提交事件,以便将表单数据发送到JSON格式的WebAPI控制器.

序列化表单数据时,没有机制来正确解析复选框和隐藏之间的关系.因此,当取消选中时,它会返回一个false,这没关系.但是当检查时,它返回一个{true, false}而不是true,因为该serializeArray()函数遍历每个input并且发现两个值变为同一个名称.

问题是:纠正它的最佳方法是什么?

Jer*_*ell 1

我对这个问题的解决方案是编写自己的 HtmlHelper 方法来呈现单个 <input type="checkbox" /> 标记。任何其他解决方案似乎都太老套了。

如果您需要任何帮助来完成该任务,您可以使用 dotPeek 或 .NET Reflector 查看 Microsoft 团队如何创建 HtmlHelper.CheckboxFor 方法。

采用 2 标记方法是为了防止 MVC 操作参数在“bool”参数没有发送到控制器的匹配参数时抛出异常(未选中的复选框不会发送任何值)。