我正在创建一个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标题可以排序?为什么会这样?
答案 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提供少量参数就可以完成。
此致