我想使用MvcContrib Grid
对相关表进行服务器端排序我有
@Html.Grid(Model.Result).Columns(column =>
{
column.For(u => u.Name).Named("Name");
column.For(u => u.Country.Name).Named("Country").SortColumnName("Country");
}).Sort(Model.GridSortOptions)
这会正确显示表格/网格。但是我不能按Country.Name排序我收到错误
DbSortClause表达式必须具有可比较的类型
答案 0 :(得分:2)
I did some digging看起来像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);
}
答案 1 :(得分:2)
我刚刚完成了一项工作。
我在我的ViewModel中添加了一个名为“CountryName”的新属性,该属性映射到Country.Name。这很好。
所以我的代码现在是
@Html.Grid(Model.Result).Columns(column =>
{
column.For(u => u.Name).Named("Name");
column.For(u => u.CountryName).Named("Country");
})
我的ViewModel
public string Name {get; set;}
public Country Country {get; set;}
public string CountryName {get; set;}