2012-05-22 93 views
0

我有以下代碼塊在剃刀視圖內複製並粘貼了大約5次不同的時間。它基本上只顯示不同數據的同一模型的表格。Html Helper在mvc3剃刀視圖中創建可重用的func?

我該如何將它重寫爲html助手或lambda func,以便可以將它重用到n個傳入視圖的不同模型中?

// Example for Model.A and Model.B 

    var cCols = new[] { "val1", "val2"}; 

    // Display the data for A 
    <div class="group-property"> 
    <div class="group-label">Title A</div>   
     <table class="collection-table"> 
     <thead> 
     <tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr> 
     </thead> 
     <tbody> 
      @foreach (var item in Model.A) 
      { 
       <td>@item.val1</td> 
       <td>@item.val2</td> 
      } 
     </tbody> 
     </table> 
    </div> 

    // Display the data for B 
    <div class="group-property"> 
    <div class="group-label">Title B</div>   
     <table class="collection-table"> 
     <thead> 
     <tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr> 
     </thead> 
     <tbody> 
      @foreach (var item in Model.B) 
      { 
       <td>@item.val1</td> 
       <td>@item.val2</td> 
      } 
     </tbody> 
     </table> 
    </div> 

回答

1

我不知道你已經嘗試了什麼,而是要使它你只需要採取改變作品,使他們的參數功能的輔助函數:

@helper MyHelperFunction(string title, IEnumerable<ItemClass> items) 
{ 
var cCols = new[] { "val1", "val2"}; 

<div class="group-property"> 
<div class="group-label">@title</div>   
    <table class="collection-table"> 
    <thead> 
    <tr class="collection-head">@foreach (var col in cCols) {<th scope="col">@col</th>}</tr> 
    </thead> 
    <tbody> 
     @foreach (var item in items) 
     { 
      <td>@item.val1</td> 
      <td>@item.val2</td> 
     } 
    </tbody> 
    </table> 
</div> 
} 

@MyHelperFunction("Title A", Model.A) 
@MyHelperFunction("Title B", Model.B) 
+0

太棒了!謝謝! – JaJ

2

我不知道我是否正確,但爲什麼不使用@ Html.Partial?

安德烈Neagu

+0

這是一個解脫的解決方案,我不想將局部視圖添加爲單獨的.cshtml文件。我寧願保留包含在主要.cshtml視圖中的所有內容。 – JaJ