如何将属性表达式传递回控制器
本文关键字:控制器 表达式 属性 | 更新日期: 2023-09-27 18:29:13
我有一个视图,它显示了一个数据表,我希望能够通过指定行类型的属性对其进行排序。
我的型号(到目前为止)是:
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();
...
}
据我所知,你不能通过URL传递复杂的对象。例如,您可以传递具有属性名称的字符串。然而,若你们只想对表进行排序,也许你们应该考虑另一种方法来解决这个问题。检查这个http://www.kryogenix.org/code/browser/sorttable/。它允许您通过单击标题来简单地对表格进行排序。