2012-05-09 7 views
3

이것이 가능한지 확실하지 않습니다.@Helper 안에 @Helper를 사용할 수 있습니까?

I는 내부보기 및 다른 뷰에서 @Helper 년대의 무리를 가지고

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

I 뷰에서 다른 뷰에서 사용되는 반복 코드를 가지고

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

실제 @ViewHelper1에는 더 복잡한 코드가 있지만 중요하지 않습니다 (제 생각 엔).

각 뷰는 @Helper의 수 's의 (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 '을 알아 내려고 노력하고 있었고 어리석게도 두 개의 매개 변수가 필요 없다는 것을 깨닫지 못했습니다. +1 코드 샘플. – REMESQ

+0

추가 질문 :'AppCode'의 파일에'@helper Table (...)'을 넣고'if' 문을 통해'Model.Entity'를 호출하면 분명히 "Can not 널 참조에서 런타임 바인딩을 수행하십시오. " 내가 그 오류를 얻을 수있는 이유를 이해하지만, 그 오류 주위에 방법이 있습니까? 아니면 한계입니까? 다시 감사합니다. – REMESQ

+0

필자가 시도 할 수있는'App_Code'에서 도우미를 구현하는 데있어서의 한계점은 다른 매개 변수를 통해 Model을'@helper Table (동적 모델, Func otherHelper)'처럼'Table'에 전달하는 것입니다. – nemesv

관련 문제