0

我有一个视图,它显示了一个数据表,我希望能够通过在行类型上指定一个属性来对其进行排序。

我的模型(到目前为止)是:

class Model
{
    List<DataType> data;
    Expression<Func<DataType, object>> SortProperty;
}

我尝试在要传递到我的控制器的视图中创建它,如下所示:

<a href='<%= Url.Action("Index", "Approvals", new IndexModel() { Page = Model.Page, SortProperty = ((ApprovalModel m) => m.Id)}) %>'>Id</a>

呈现为:

<a href='/PartsLegislation/Approvals.aspx/Approvals?SortProperty=m%20%3D%3E%20Convert(m.Id)'>Id</a>

所以它看起来有点像它会工作(Convert在那里有一个表达式),但是在控制器SortProperty中总是null.


TL;DR:如何将指向属性的表达式从我的视图传递给控制器​​?


编辑:我的控制器动作如下:

[HttpGet]
public ActionResult Index(Model viewModel)
{
    ....
    viewModel.Approvals = PartsDC.Repository<Approval>()
                             .Where(a => !a.Deleted)
                             .OrderBy(viewModel.SortExpression)
                             .Skip((viewModel.Page ?? 0) * RowsPerPage)
                             .Take(RowsPerPage)
                             .Select(a => Mapper.Map<Approval, ApprovalHeaderModel>(a))
                             .ToList();
    ...
}
4

1 回答 1

1

据我所知,您不能通过 URL 传递复杂的对象。例如,您可以传递带有属性名称的字符串。但是,如果您只想对表进行排序,也许您应该考虑另一种解决此问题的方法。检查这个http://www.kryogenix.org/code/browser/sorttable/。它允许您通过单击标题简单地对表格进行排序。

于 2013-08-28T09:57:05.667 回答