2012-05-09 10 views
3

これが可能かどうかはわかりません。@Helperの内部で@Helperを使用できますか?

Iは、ビュー内および他のビューに@Helper「Sの束を持っている:

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

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

私はビューと他のビューで使用される反復コードを有します実際の@ViewHelper1はもっと複雑なコードを持っていますが、それは重要ではありません(私は思います)。各ビューは@Helper年代(30+ビュー、10-15 @Helperのそれぞれ)の数を持っており、<table>構造が同じであるため

まあ、私はそのApp_Code@Helperの作成に取り掛かるためにどのように思っていました<td>構造体をカプセル化し、ビューの@Helperを渡します。

は言う:それは私がちょうど構文で助けを必要であれば

@Table(HelperView1) 

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

などのビューでそれを呼び出してかどうかそれがことも可能だと

いつもと非常に高く評価されています。

答えて

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 'を見つけ出そうとしていて、愚かにも私は2つのパラメータを必要としなかったことに気付かなかった。 +1のコードサンプル。 – REMESQ

+0

フォローアップの質問: 'Appecode'のファイルに' @helper Table(...) 'を入れて、' if'文を通して 'Model.Entity'を呼び出すと、私は明らかに" Can notヌル参照に対して実行時バインディングを実行する "。私はなぜそのエラーを得るのか理解していますが、そのエラーを回避する方法はありますか?それとも限界ですか?ありがとうございました。 – REMESQ

+0

これは 'App_Code'にヘルパーを置くことの限界だと思うのですが、モデルを' @helper Table(動的モデル、Func otherHelper) 'のように' Table'に別のパラメータで渡すことです。 – nemesv

関連する問題