如何将属性表达式传递回控制器?

时间:2013-08-28 09:47:10

标签: c# asp.net-mvc asp.net-mvc-3

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

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

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();
    ...
}

1 个答案:

答案 0 :(得分:1)

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