你能在@Helper中使用@Helper吗?

时间:2012-05-09 18:34:20

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

我不确定这是可能的。

我在视图和其他视图中有一堆@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>结构是相同的,所以我是想知道如何在@Helper中创建一个封装App_Code结构的<td>,然后传递视图的@Helper

说:

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

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

@Table(HelperView1)

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

一如既往,非常感谢。

1 个答案:

答案 0 :(得分: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>