MVC中的ModelBinding参数列表

时间:2014-03-07 23:24:58

标签: jquery .net asp.net-mvc datatables model-binding

我正在尝试将jQuery Datatables 1.10用于服务器端处理和ASP.NET MVC 5.不幸的是,Datatables 1.10通过将复杂的对象层次序列化为参数字符串(Content-Type: application/x-www-form-urlencoded来写入服务器),breaks the MVC ModelBinder

在MVC中,有没有办法将复杂的对象层次结构作为序列化参数列表进行绑定?也许有人写过自定义的ModelBinder?

注意:

traditional = true调用中设置ajax不起作用,因为它不支持对象的层次结构。我最终得到了类似的东西:

draw=1&
columns=[object Object]&
columns=[object Object]&
order=[object Object]&
start=0&
length=10&
search=[object Object]

如果数据是由DataTables作为JSON发送的,那么我认为一切都会好的。问题源于数据作为参数列表发送的事实。

同时注意

接线表的代码:

$("#serverTable").DataTable({
    serverSide: true,
    ajax: {
        url: '/Home/GetTableData',
        type: 'POST'
    }
});

3 个答案:

答案 0 :(得分:4)

免责声明:我是GitHub上提到的DataTables.MVC项目的作者

DataTables 1.10(新API)的问题在于它的请求结构与ASP.NET MVC绑定引擎不完全兼容。

您可以编写自己的活页夹,也可以手动处理从QueryString(GET)或Form(POST)中的DataTables发送的每个参数。您可以覆盖它以支持其他方法。

我项目背后的整个意识形态是让你不要一次又一次地处理请求参数。只需设置活页夹并使用模型:https://github.com/ALMMa/datatables-mvc

在GitHub项目的第一页上,有一个示例代码,用于设置绑定器处理列排序/排序。


正如项目中所描述的,DataTables发送的排序信息在某些情况下很有用(直接SQL命令),但如果您使用静态列表/枚举或常规linq(尽管您可以使用Dynamic Linq,可能不是那么好)帮助这个)。


今天我提交了一些新代码来帮助您自定义/扩展常规绑定器或以更友好的方式创建JSON绑定器,并帮助从模型中获取过滤/排序列。

答案 1 :(得分:2)

尝试一下:https://github.com/ALMMa/datatables-mvc

它是新DataTable 1.10输入的自定义ModelBinder实现。我昨天才发现它,我仍在努力实施。所以我不能说它有多好用;我还没到达测试点。但它看起来不错,我打算使用它。

答案 2 :(得分:2)

几天前我遇到了同样的问题,解决方案很简单。您可以阅读here有关它的更多信息。

您只需传入一个函数作为ajax数据属性的回调。 回调函数将数据作为JSON字符串返回:

var opts =
    {
        'ajax'    :
        {
            'url': 'serverSideTableProviderPage',
            'type': 'POST',
            'contentType': 'application/json; charset=utf-8',
            'data':function(data)
             {
                   return data = JSON.stringify(data);
             }
        },
        'pagingType': 'simple',
        [more options ...]
    }
$('table').dataTable(opts);

数据现在作为Json发送,ModelBinder将填充深层嵌套对象属性。别忘了将contentType设置为" application / json;字符集= UTF-8"