MVC中的ModelBinding参数列表
我正在尝试使用jQuery Datatables 1.10与服务器端处理和ASP.NET MVC 5.不幸的是,Datatables 1.10通过将复杂的对象层次序列化为param字符串( Content-Type: application/x-www-form-urlencoded
来写入服务器Content-Type: application/x-www-form-urlencoded
),它打破了MVC ModelBinder 。
在MVC中,有没有办法将复杂的对象层次结构作为序列化参数列表进行绑定? 也许有人写过的自定义ModelBinder?
注意:
在ajax
调用中设置traditional = true
不起作用,因为它不支持对象的层次结构。 我最终得到的结果如下:
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' } });
免责声明:我是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绑定器,并帮助从模型中获取过滤/排序列。
尝试一下: https : //github.com/ALMMa/datatables-mvc
它是新DataTable 1.10输入的自定义ModelBinder实现。 我昨天刚刚发现它,我仍在努力实施。 所以我不能说它有多好用; 我还没有达到测试的程度。 但它看起来不错,我打算使用它。
几天前我遇到了同样的问题,解决方案很简单。 你可以在这里阅读更多相关信息。
您只需传入一个函数作为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; charset = utf-8”