使用WebGrid排序

时间:2012-01-25 11:53:37

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

我正在创建一个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")
     )
);

在这个示例中,项目标题不可排序,但所有者参考是。问题是,如何让Item标题可以排序?为什么会这样?

2 个答案:

答案 0 :(得分:3)

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

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帮助程序在显示之前对数据集进行排序/分页。

答案 1 :(得分:0)

在我的情况下,我设法只通过为格式化列提供columnName来进行默认排序。

我同意排序和分页应该在服务器端完成这一事实,但是只需要为WebGrid提供少量参数就可以完成。

此致