目前在MVC中,我们必须在我们想要列出项目时手动定义列:
<tr>
<td>
@Model.Name
</td>
<td>
@Model.Age
</td>
<td>
@Model.Gender
</td>
</tr>
我想要做的是拥有一个ViewModel,我们指定应该使用哪些列,如:
var model = new PersonViewModel(
// List of persons
CollectionOfPersons,
// List of columns that we want to display
new Expression<Func<Person, object>>[]
{
x => x.Name,
x => x.Age,
x => x.Gender
});
然后在我们看来,我需要做的就是:
<tr>
// Model.Predicates is our ViewModel's selected columns
@foreach(var predicate in Model.Predicates)
{
<td>
// This would basically loop each pre-defined lambda expression in our ViewModel
@Html.DisplayFor(predicate)
</td>
}
</tr>
我不得不承认我对表达方式的理解非常薄弱,到目前为止我一直没有找到信息。有没有人知道这是否可行?
答案 0 :(得分:0)
似乎html助手不像那样工作(将表达式作为变量传递)。编译器明确需要一个表达式来确定TModel和TResult类型能够工作。