Che*_*hev 5 ajax asp.net-mvc model-binding asp.net-mvc-3 kendo-ui
我正在使用KendoUI Grid来显示数据.我的服务器分页工作就像一个魅力.kendo网格中的每个页面更改是对服务器的新ajax请求,服务器返回正确的数据页面.我现在正在尝试进行服务器端排序,但是我无法将模型绑定绑定到排序值.
这就是Kendo Grid的请求:

我的动作方法如下所示:
public JsonResult GetReports(int pageSize, int skip, List<KendoSort> sort)
{
// sort is not being populated with the right data.
}
Run Code Online (Sandbox Code Playgroud)
KendoSort是一个自定义类:
public class KendoSort
{
public string Field { get; set; }
public string Dir { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我知道我做得不对.我的操作方法应如何正确捕获为排序提供的数据?屏幕截图仅显示排序集合中的单个项目,但网格可以传递更多.例如,它还可能包含一个额外的类别:
sort[1][field]: reportName
sort[1][dir]: asc
Run Code Online (Sandbox Code Playgroud)
基本上它会说"按升序排序,然后按升序排序".如何将这些数据导入到我的操作方法中而不必四处寻找Request并手动解析参数?
ASP.NET MVC模型绑定器不理解表达式sort[0][field].它只能理解sort[0].field哪个是不幸的,因为它jQuery.ajax以前一种格式提交嵌套对象.
有两种方法可以解决问题:
创建一个parameterMap并翻译排序表达式:
parameterMap: function(options) {
var result = {
pageSize: options.pageSize,
skip: options.skip
};
if (options.sort) {
for (var i = 0; i < options.sort.length; i++) {
result["sort[" + i + "].field"] = options.sort[i].field;
result["sort[" + i + "].dir"] = options.sort[i].dir;
}
}
return result;
}
Run Code Online (Sandbox Code Playgroud)我最终使用参数映射,但不是重新构造排序字段,而是简单地对选项进行字符串化并在CRUD传输上指定contentType.只要指定了contentType,模型绑定器就知道绑定到字符串化的JSON.
transport: {
read: {
url: '...',
type: 'POST',
contentType: 'application/json'
},
update: {
url: '...',
type: 'POST',
contentType: 'application/json'
},
destroy: {
url: '...',
type: 'POST',
contentType: 'application/json'
},
create: {
url: '...',
type: 'POST',
contentType: 'application/json'
},
parameterMap: function (options, type) {
return JSON.stringify(options);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4139 次 |
| 最近记录: |