为什么一个剃刀助手不能打电话给另一个助手?

loz*_*ozz 6 asp.net-mvc razor asp.net-mvc-4

我在.cshtml文件中运行下面的剃刀代码(它是我需要实现的更复杂的简化版本),但是renderTestB助手似乎没有执行.

@renderTestA("test string 1", "test string 2");

@helper renderTestA(string input1, string input2)
{
    <div>
        @renderTestB(input1)
        @renderTestB(input2)
    </div>
}

@helper renderTestB(string input)
{
    <p class="test">@input</p>
}
Run Code Online (Sandbox Code Playgroud)

为什么是这样?还有另一种方法可以实现我想要做的事情吗?

我意识到我可以在renderTestA帮助器中复制段落代码,但显然更喜欢可重用的代码解决方案.

Bra*_*d C 1

像这样的事情怎么办?

@renderTestA(renderTestB("test string 1"), renderTestB("test string 2"))

@helper renderTestA(string input1, string input2)
{
    <div>
        @input1
        @input2
    </div>
}

@helper renderTestB(string input)
{
    <p class="test">@input</p>
}
Run Code Online (Sandbox Code Playgroud)

您应该考虑使用编辑器/显示模板或自定义 HTML 帮助程序,因为 @helper 功能在这些功能成为规范之前就已使用。

至于为什么不能嵌套它们。它引入了许多问题,通过使用我上面建议的语法可以轻松避免这些问题。例如......如果你有一个嵌套助手的循环,它很容易导致堆栈溢出。