ASP.NET MVC 表单和 jquery 的序列化数组() 用 false 覆盖复选框的状态



我有一个简单的表单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请求,并在响应中尝试将数据源提供给网格。

相关内容

最新更新