2012-05-09 118 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

相关问题