2012-05-09 160 views
3

我不確定這是可能的。你可以在@Helper中使用@Helper嗎?

我有一堆@Helper的一個視圖內,在其它觀點:

@helper ViewHelper1() 
{ 
    ... 
} 
@helper ViewHelper2() 
{ 
    ... 
} 
etc. 

我有一個是在視圖和其他視圖中所用的重複代碼:

@if (!(Model.Entity == Model.Enum.One)) 
    { 
     <td> 
      @ViewHelper1() 
     </td> 
    } 
    else 
    { 
     <td> 
      @ViewHelper1() 
     </td> 
     <td> 
      @ViewHelper1() 
     </td> 
    } 

的實際@ViewHelper1有更復雜的代碼,但這並不重要(我認爲)。

好吧,既然每個視圖有許多@Helper的(30+看法,10-15 @Helper的每一個)和<table>結構是一樣的,我不知道如何去在App_Code創建@Helper那封裝了<td>結構,然後通過視圖的@Helper

說:

@helper Table(...) 
    { 
     ... 
    } 

或者判斷這甚至有可能,然後調用它的觀點一樣,:

@Table(HelperView1) 

如果我只是需要幫助的語法。

一如既往,非常感謝。

回答

2

生成的剃刀助手只是函數返回類型HelperResult。 您可以讓代表在主助手中返回HelperResult作爲參數,並在適當的位置調用它們。

一個小樣本,讓你開始:

@helper View1() 
{ 
    <h1>View1</h1> 
} 

@helper View2() 
{ 
    <h2>View2</h2> 
} 

@helper Table(Func<HelperResult> viewHelper) 
{ 
    <text>Reuslt of viewHelper</text> 
    @viewHelper() 
} 

@Table(View1) 
@Table(View2) 

生成的輸出:

Reuslt of viewHelper 
<h1>View1</h1> 

Reuslt of viewHelper 
<h2>View2</h2> 
+0

感謝。我試圖找出'Func ',並且愚蠢地沒有意識到我不需要兩個參數。代碼示例+1。 – REMESQ

+0

後續問題:如果我把'@helper Table(...)'放在'App_Code'的一個文件中,然後嘗試通過if語句調用'Model.Entity',我顯然會得到一個「Can not對空引用執行運行時綁定「。我明白爲什麼我會得到這個錯誤,但是有沒有解決這個錯誤的方法?或者它是一個限制?再次感謝你。 – REMESQ

+0

我認爲這是將輔助函數放在App_Code中的一個限制,您可以嘗試的是將模型通過另一個參數傳遞給您的'Table',如'@helper Table(動態模型,Func otherHelper)' – nemesv

相關問題