使用lambda表达式预先选择对象属性,然后在MVC中显示?

时间:2011-07-18 10:22:34

标签: asp.net-mvc linq lambda

目前在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>

我不得不承认我对表达方式的理解非常薄弱,到目前为止我一直没有找到信息。有没有人知道这是否可行?

1 个答案:

答案 0 :(得分:0)

似乎html助手不像那样工作(将表达式作为变量传递)。编译器明确需要一个表达式来确定TModel和TResult类型能够工作。