【问题标题】:Can you use a @Helper inside an @Helper?你可以在@Helper 中使用@Helper 吗?
【发布时间】:2012-05-09 18:34:19
【问题描述】:

我不确定这是否可行。

我在一个视图和其他视图中有一堆@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)并且 &lt;table&gt; 结构是相同的,我想知道如何去创建App_Code 中的 @Helper 封装了 &lt;td&gt; 结构,然后将传递视图的 @Helper

说:

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

或者这是否可能,然后在视图中调用它:

@Table(HelperView1)

如果是,我只需要语法方面的帮助。

一如既往,非常感谢。

【问题讨论】:

    标签: asp.net-mvc-3 razor razor-declarative-helpers


    【解决方案1】:

    生成的剃刀助手只是返回类型为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>
    

    【讨论】:

    • 谢谢。我试图弄清楚Func&lt;T, TResult&gt; 并且愚蠢地没有意识到我不需要两个参数。 +1 代码示例。
    • 后续问题:如果我将@helper Table(...) 放入App_Code 的文件中,然后尝试通过if 语句调用Model.Entity,我显然会得到“无法执行运行时绑定到空引用”。我明白为什么我会收到这个错误,但是有没有办法解决这个错误?或者这是一个限制?再次感谢您。
    • 我认为这是将助手放入App_Code 的限制,您可以尝试将模型通过另一个参数传递给您的Table,例如@helper Table(dynamic model, Func&lt;HelperResult&gt; otherHelper)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-05-23
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2011-10-17
    • 2011-11-26
    • 1970-01-01
    相关资源
    最近更新 更多