2

我的 ASP.NET Core 控制器中有以下方法

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; }
}

我在前端 Kendo UI Web 网格上的 javascript 做了一个 get controller 方法

$("#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
    },

如果我在提琴手中监视它,我可以捕获 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

在此处输入图像描述 当我调试我的控制器方法时,我可以看到传递给该方法的所有属性都具有正确的值,除了IEnumerable<Sort> sort作为 null 接收的值。我尝试将其更改为Sort[] sort但结果仍然相同

据我了解,这是 asp.net 核心所独有的,它们以 kendo ui 发送数组的方式。我用 Telerik 支持记录了电话,说 Kendo UI Web 网格不支持 asp.net 核心。我看不出原因,因为 Fiddler 清楚地发送了数据。我只需要以某种方式获取参数来支持它。

4

1 回答 1

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

于 2017-03-03T14:05:50.290 回答