【问题标题】:Sorting with WebGrid使用 WebGrid 排序
【发布时间】:2012-01-25 11:53:37
【问题描述】:

我正在创建一个 WebGrid 并尝试启用排序。实际上,排序有效,但我注意到您只能对 grid.columns 调用中 columnName 不为空白的列进行排序。所以在我的例子中我有这个:

@grid.GetHtml(
    columns: grid.Columns(
        grid.Column(columnName: "", header: "Item title", format: @<text> @GetItemTitle(@item.InventoryReference) </text>),
        grid.Column(columnName: "OwnerReference", header: "Owner reference")
     )
);

在此示例中,项目标题不可排序,但所有者参考可排序。问题是,我如何让项目标题可排序,为什么会发生这种情况?

【问题讨论】:

    标签: asp.net-mvc-3 razor webgrid


    【解决方案1】:

    对于使用自定义格式的列,您必须自己进行排序。因此,您必须为您的自定义列命名,该名称将用于在服务器上识别它:

    grid.Column(
        columnName: "title", 
        header: "Item title", 
        format: @<text> @GetItemTitle(@item.InventoryReference) </text>
    ),
    

    点击此列的标题后,将向控制器操作发送一个查询,如下所示:

    /controller/action/?sort=title&sortdir=ASC
    

    因此,在您的控制器操作中,您将使用此信息对数据集进行排序。

    public ActionResult Foo(string sort, string sortdir)
    {
        // check if sort = title and then sort your dataset accordingly
        // before returning the model to the view
        ...
    }
    

    对未定义自定义格式的列进行排序的原因是,WebGrid 帮助程序能够在显示数据集之前自动对其进行排序,但这显然很糟糕,因为排序和分页之类的事情绝对应该在您的后端层(例如,如果您使用的是数据库,则在数据库中)以便进行有效的排序和分页。因此,即使对于没有自定义格式的列,您也应该在数据库级别进行排序/分页,而不是依赖 WebGrid 助手在显示之前对数据集进行排序/分页。

    【讨论】:

      【解决方案2】:

      在我的例子中,我只通过为格式化的列提供 columnName 来实现默认排序。

      我同意排序和分页应该在服务器端完成的事实,但是只为 WebGrid 提供很少的参数就可以很方便地完成所有操作。

      问候,

      【讨论】:

        猜你喜欢
        • 2012-09-20
        • 1970-01-01
        • 2012-11-03
        • 2013-08-11
        • 2013-08-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多