无法在ASP.NET.Core MVC控制器方法中接收多维数组

时间:2017-03-03 13:22:25

标签: asp.net-core kendo-grid asp.net-core-mvc kendo-ui-grid

我的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

enter image description here 当我调试我的控制器方法时,我可以看到传递给该方法的所有属性除了接收为null的IEnumerable<Sort> sort之外都具有正确的值。我尝试将其更改为Sort[] sort,但结果仍然相同

根据我的理解,这对于asp.net核心来说是独一无二的,他们的方式是kendo ui发送数组。我通过Telerik支持记录了调用,他说Kendo UI Web网格不支持asp.net核心。由于Fiddler清楚地发送数据,我无法看到这个的原因。我只需要以某种方式获取参数来支持它。

1 个答案:

答案 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将新的/更新/删除的数组传递给服务器的方式相同,因此当我需要传递自己的数组时,我“复制”了它的格式我