如何在Razor帮助器中正确渲染帮助器?

时间:2016-04-27 18:07:14

标签: asp.net-mvc asp.net-mvc-4 razor

想象一下这个场景......

@helper TabTest()
{
    using (Html.BeginPortlet())
    {
        <strong>hello</strong>
    }
}

如果我在Razor文件中调用它,那么渲染就可以了。

@TabTest()

输出:<div class="portlet"><strong>hello</strong></div>

如果我使用其他助手调用它...例如:@Html.RenderBootstrapTabContent(TabTest())那么渲染就不一样了。

输出:

<div class="portlet"></div>
<strong>hello</strong>

这只是一个粗略的例子,我已经删除了冗余代码以简化。我认为它与管道的编写方式有关,但我认为无法修复它。

我已阅读有关viewcontexts和textwriters的内容,但不知道它们将如何应用于此处。

帮助者:

public static MvcHtmlString RenderBootstrapTabContent(this HtmlHelper helper, HelperResult content)
{
    return content.ToHtmlString();
}

BeginPortlet方法是自定义的,与BeginForm非常相似,并使用IDisposable界面。

我该怎么做才能解决这个奇怪的错误?

1 个答案:

答案 0 :(得分:0)

万一我的问题对你没有意义,我发现其他人做了我试图解释的事情而没有以同样的方式打电话给他们。 http://jordanwallwork.co.uk/2012/07/nested-htmlhelpers-with-razor-and-using/

在阅读了我可以上网的所有内容后,我仍然没有找到答案。似乎也许没有其他人尝试过(或者不知道)。

我最后通过使用帮助程序和IDisposable以与BeginPortlet相同的方式重写RenderBootstrapTabContent方法来解决此问题。所以现在不要写...

@Html.RenderBootstrapTabContent(TabTest())

我现在用

using (Html.BeginBootstrapTabContent()) { @TabTest() }

在过去的几天里我浪费了很多时间,所以我帮助你可以帮助你。

如果您有更好的主意,请告诉我。