我有一个简单的表单MVC Html帮助与不同类型的字段,包括一个单一的复选框。
@Html.CheckBoxFor(m => m.Filter.IncludeInactiveGifts)
这个帮助器总是生成两个控件。这里你可以看到一个选中复选框的case:
<input class="check-box" id="Filter_IncludeInactiveGifts" name="Filter.IncludeInactiveGifts" type="checkbox" value="true">
<input name="Filter.IncludeInactiveGifts" type="hidden" value="false">
所以当提交用@Html构建的表单时。一切都提交好了,我总是得到这个复选框的真或假值。但在我的情况下,我有一个telerik的网格在页面上,我使用jquery serializeArray()序列化表单和发送它与网格的Ajax数据绑定请求,因为我使用这个表单作为我的网格过滤器。
js:
var Grid_onDataBinding = function(e) {
var filterFields = {};
var formSerialized = $filterForm.serializeArray();
$.each(formSerialized, function(i, field) {
filterFields[field.name] = field.value;
});
e.data = filterFields;
};
因此,由于MVC的助手在序列化期间为复选框创建了两个字段,我总是从第二个字段获得假值。当数据传递给控制器时,第二个值(总是false)被绑定到模型的属性。
解决这个问题的最好方法是什么?
尝试先提交表单而不调用serializeArray(),并查看是否在发布时获得了正确的复选框值。之后,您可以尝试ajax请求,并在响应中尝试将数据源提供给网格。