2016-04-27 54 views
1

想象一下这个场景......如何在剃刀助手内正确渲染助手?

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

如果我把它在剃刀文件,那么它呈现的罚款。

@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接口。

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

回答

0

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

看完我可以上网的东西后,我仍然没有找到答案。似乎也许没有其他人尝试过(或不知道)。

我最终通过使用助手和IDisposable以与BeginPortlet相同的方式重写RenderBootstrapTabContent方法来解决问题。所以,现在不是写...

@Html.RenderBootstrapTabContent(TabTest()) 

我现在用

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

我对这个浪费了大量的时间在过去的几天里,所以我帮这可能帮助你。

如果你有一个更好的主意,请让我知道。