我做了一些挖掘,看起来 MvcContrib Grid 公开的本机 OrderBy() 方法不支持对子属性的数据进行排序。
在处理呈现和排序数据的控制器操作中data = data.OrderBy(sort.Column, sort.Direction)
,您需要稍微自定义行为,而不是调用。在您的情况下,最简单的解决方案可能是专门处理值“Country.Name”,然后对其余可排序列使用默认行为。像这样的东西就足够了:
public ActionResult Index(GridSortOptions sort) {
ViewData["sort"] = sort;
var data = GetData();
if (!string.IsNullOrEmpty(sort.Column)) {
if(sort.Column.Equals("Country.Name", StringComparison.OrdinalIgnoreCase)) {
if(sort.Direction == SortDirection.Ascending) {
data = data.OrderBy(d => d.Country.Name);
} else {
data = data.OrderByDescending(d => d.Country.Name);
}
} else {
data = data.OrderBy(sort.Column, sort.Direction);
}
}
return View(data);
}