如何在剃刀助手内正确渲染助手?
问题描述:
想象一下这个场景......如何在剃刀助手内正确渲染助手?
@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
接口。
我该怎么办才能解决这个奇怪的错误?
答
为防万一我的问题对你没有意义,我发现有人做了我试图解释的事情,只是没有用同样的方式给他们打电话。 http://jordanwallwork.co.uk/2012/07/nested-htmlhelpers-with-razor-and-using/
看完我可以上网的东西后,我仍然没有找到答案。似乎也许没有其他人尝试过(或不知道)。
我最终通过使用助手和IDisposable
以与BeginPortlet相同的方式重写RenderBootstrapTabContent方法来解决问题。所以,现在不是写...
@Html.RenderBootstrapTabContent(TabTest())
我现在用
using (Html.BeginBootstrapTabContent()) { @TabTest() }
我对这个浪费了大量的时间在过去的几天里,所以我帮这可能帮助你。
如果你有一个更好的主意,请让我知道。