Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 如何将表单中的复选框序列化为Json数据_Asp.net Mvc_Json_Checkbox_Jsonserializer - Fatal编程技术网

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

Asp.net mvc 如何将表单中的复选框序列化为Json数据,asp.net-mvc,json,checkbox,jsonserializer,Asp.net Mvc,Json,Checkbox,Jsonserializer,我们知道在MVC中,CheckBoxFor将生成一个带有value=“true”的复选框和一个带有value=false的隐藏的。两个输入控件将共享相同的名称 这是非常合理的,因为如果复选框未选中,表单将能够发布一个假值。当复选框返回true时,模型绑定器将忽略隐藏的输入 但是现在我已经重写了表单提交事件,以便以JSON格式将表单数据发送到WebAPI控制器 序列化表单数据时,没有任何机制可以正确解析复选框和隐藏数据之间的关系。因此,当取消选中时,它返回一个false,这是正常的。但是当选中时,

我们知道在MVC中,
CheckBoxFor
将生成一个带有
value=“true”
复选框和一个带有
value=false的
隐藏的
。两个输入控件将共享相同的名称

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

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

序列化表单数据时,没有任何机制可以正确解析复选框和隐藏数据之间的关系。因此,当取消选中时,它返回一个
false
,这是正常的。但是当选中时,它会返回一个
{true,false}
,而不是
true
,因为
serializeArray()
函数遍历每个
输入
,并找到两个指向同一名称的值


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

我解决这个问题的方法是编写自己的HtmlHelper方法来呈现单个标记。任何其他解决方案似乎都太老套了

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

当“bool”参数没有发送到控制器的匹配参数(未选中的复选框不发送任何值)时,采用2位标记方法防止MVC操作参数引发异常。

可能重复的