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

本文关键字:控制器 表达式 属性 | 更新日期: 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/。它允许您通过单击标题来简单地对表格进行排序。