首页 > 解决方案 > 在 Asp.Net MVC 中的 Datatables 中获取用于排序的多个列的名称

问题描述

我需要实现一种方法来获取包含所有列名称的列表,以便在 jquery 数据表插件中进行排序。目前,这仅捕获应排序的第一列的名称。

var sortingColumnName = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]")?[0] + "][name]")?[0];

我无法将字符串设置为Request.Form.GetValues.

我需要这种情况,例如:

"order": [[2, "asc"], [4, "desc"], [3, "desc"]]

当您检查元素时,您可以验证在此示例中是否有三个要排序的键,但在其他情况下,您可能有更多或更少的键

在此处输入图像描述

标签: asp.netasp.net-mvcdatatables

解决方案


不要使用Request.Form. 您当前遇到的问题是您正在尝试将发布的数据手动反序列化为某种可用的数据结构。ASP.NET MVC 中的模型绑定已经做到了这一点。

适用于 DataTables 的模型结构如下所示:

public class DataTablesRequestViewModel
{
    public int draw { get; set; }
    public int start { get; set; }
    public int length { get; set; }
    public IList<DataTablesOrder> order { get; set; } = new List<DataTablesOrder>();

    public class DataTablesOrder
    {
        public int column { get; set; }
        public string dir { get; set; }
    }
}

您可以修改/扩展/等。根据您的需要,但 DataTables 的默认发布结构应与此匹配。只需在您的控制器操作中接受此模型:

public ActionResult YourActionMethod(DataTablesRequestViewModel request)
{
    // in here you can get the list of sorted columns from: request.order
}

推荐阅读