1

有谁知道在使用复杂对象时如何对 MVCContrib 网格进行排序。

我的网格正在显示 Person 列表,我正在尝试对 Country 属性进行排序。问题是 Country 是一个 Address 类的属性,它是 Person 的一个属性。

人.地址.国家

    <%Html.Grid(Model).Columns(column =>
   {
       column.For(x => x.Id);
       column.For(x => x.FirstName);
       column.For(x => x.LastName).Sortable(false);
       column.For(x => x.Address.Country).Sortable(false);
       column.For(x => x.Age).Sortable(true);
   }).Render(); %>

例外:
没有为类型“{Namespace}.Person”定义属性“Country”
var sourceProp = Expression.Property(sourceParam, this.SortBy); \MVCContrib\UI\Grid\Sortable\ComparableSortList.cs 行:41

任何的意见都将会有帮助。

谢谢,

MG1

4

3 回答 3

1

一种解决方法是将其Country作为属性公开Person并使用它:

public string Country { get { return Address.Country; } }
于 2009-10-13T20:51:57.547 回答
0

为此,您需要使用 SortColumnName。

column.For(x => x.Address.Country).SortColumnName("Address.Country");

我已经对此进行了测试,它就像一个魅力:)

如果您无法访问 SortColumnName(),您可以从 http://mvccontrib.codeplex.com/SourceControl/changeset/changes/7db1cecc938f获取最新版本的 MVC contrib

于 2010-08-20T14:03:02.047 回答
0

@orip 给了你答案。

但是如果你想使用排序功能,你需要使用:

<%Html.Grid(Model).Columns(column =>
{
   column.For(x => x.Id);
   column.For(x => x.FirstName);
   column.For(x => x.LastName).Sortable(false);
   column.For(x => x.Address.Country).Sortable(false);
   column.For(x => x.Age).Sortable(true);
}).RenderUsing(new SortableHtmlTableGridRenderer<Person>())
 .Render(); %>

资料来源: http: //www.jeremyskinner.co.uk/2009/02/23/rewriting-the-mvccontrib-grid-part-3-gridmodels-and-gridrenderers/

于 2010-02-10T00:58:50.747 回答