2011-07-18 23 views
0

目前在MVC中,我們必須手動定義列,每當我們要列出項目:使用lambda表達式預選對象屬性,然後在MVC中顯示?

<tr> 
    <td> 
     @Model.Name 
    </td> 
    <td> 
     @Model.Age 
    </td> 
    <td> 
     @Model.Gender 
    </td> 
</tr> 

我想不過的事,就是有一個視圖模型,我們指定要使用的列,像:

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> 

我不得不承認我有EXP一個非常薄弱的​​理解迴應,而我迄今在尋找信息方面一直不成功。有沒有人有任何想法,如果這是可能做到的?

回答

0

看起來像HTML助手不像那樣工作(將表達式作爲變量傳入)。編譯器明確需要一個表達式來確定能夠工作的TModel和TResult類型。