我有一个视图,通过在行类型上指定属性来显示我希望能够排序的数据表。
我的模特(到目前为止)是:
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();
...
}
答案 0 :(得分:1)
据我所知,你不能通过URL传递复杂的对象。您可以传递名称为property的示例字符串。 但是,如果您只想对表进行排序,那么您应该考虑另一种解决此问题的方法。检查此http://www.kryogenix.org/code/browser/sorttable/。 它允许您通过单击标题对表进行简单排序。