我的ASP.NET核心控制器中有以下方法
public async Task<JsonResult> MyJsonResultMethod(int page,int take, int skip, IEnumerable<Sort> sort){
...
public class Sort
{
public string field { get; set; }
public string dir { get; set; }
}
我在前端的javascript Kendo UI Web网格执行get控制器方法
$("#grid").kendoGrid({
dataSource: {
type: "json",
transport: {
read: "/MyController/MyJsonResultMethod"
},
pageSize: 5,
serverPaging: true,
serverSorting: true
},
height: 550,
sortable: true,
pageable: {
refresh: true,
pageSizes: true,
buttonCount: 5
},
如果我在fiddler中监视它,我可以捕获HTTPGet并看到所有值都被传递
GET http://localhost:62594/MyController/MyJsonResultMethod?take=5&skip=0&page=1&pageSize=5&sort%5B0%5D%5Bfield%5D=DocumentNumber&sort%5B0%5D%5Bdir%5D=asc
当我调试我的控制器方法时,我可以看到传递给该方法的所有属性除了接收为null的IEnumerable<Sort> sort
之外都具有正确的值。我尝试将其更改为Sort[] sort
,但结果仍然相同
根据我的理解,这对于asp.net核心来说是独一无二的,他们的方式是kendo ui发送数组。我通过Telerik支持记录了调用,他说Kendo UI Web网格不支持asp.net核心。由于Fiddler清楚地发送数据,我无法看到这个的原因。我只需要以某种方式获取参数来支持它。
答案 0 :(得分:0)
我不确定“sort [0] [field]”是否已正确格式化为ASP.Core模型绑定器以正确解释它。
这是我如何格式化并将数组数据传递给控制器并使其绑定(在ASP.NET MVC中,而不是Core)。
请求数据:
sort[0].field: DocumentNumber
sort[0].dir: asc
sort[1].field: SecondSortField
sort[1].dir: asc
控制器操作:
public async Task<JsonResult> MyJsonResultMethod(
int page,
int take,
int skip,
[Bind(Prefix = "sort")]IEnumerable<Sort> sort)
使用[Bind]进行格式化和操作的方式与Kendo Grid将新的/更新/删除的数组传递给服务器的方式相同,因此当我需要传递自己的数组时,我“复制”了它的格式我