Asp.net mvc 如何将表单中的复选框序列化为Json数据
我们知道在MVC中,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,这是正常的。但是当选中时,
CheckBoxFor
将生成一个带有value=“true”
的复选框和一个带有value=false的隐藏的。两个输入控件将共享相同的名称
这是非常合理的,因为如果复选框未选中,表单将能够发布一个假值。当复选框返回true时,模型绑定器将忽略隐藏的输入
但是现在我已经重写了表单提交事件,以便以JSON格式将表单数据发送到WebAPI控制器
序列化表单数据时,没有任何机制可以正确解析复选框和隐藏数据之间的关系。因此,当取消选中时,它返回一个false
,这是正常的。但是当选中时,它会返回一个{true,false}
,而不是true
,因为serializeArray()
函数遍历每个输入
,并找到两个指向同一名称的值
问题是:纠正它的最佳方法是什么?我解决这个问题的方法是编写自己的HtmlHelper方法来呈现单个标记。任何其他解决方案似乎都太老套了
如果需要帮助完成该任务,可以使用dotPeek或.NET Reflector查看Microsoft团队如何创建HtmlHelper.CheckboxFor方法
当“bool”参数没有发送到控制器的匹配参数(未选中的复选框不发送任何值)时,采用2位标记方法防止MVC操作参数引发异常。可能重复的