【问题标题】:How do I render a helper properly within a Razor helper?如何在 Razor 助手中正确渲染助手?
【发布时间】:2016-04-27 18:07:14
【问题描述】:

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

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

如果我在 Razor 文件中调用它,那么它渲染得很好。

@TabTest()

输出:&lt;div class="portlet"&gt;&lt;strong&gt;hello&lt;/strong&gt;&lt;/div&gt;

如果我使用另一个助手调用它...例如:@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 接口。

如何解决这个奇怪的错误?

【问题讨论】:

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


    【解决方案1】:

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

    在网上阅读了所有我能找到的东西后,我仍然没有找到答案。似乎没有其他人尝试过(或不知道)。

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

    @Html.RenderBootstrapTabContent(TabTest())
    

    我现在用

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

    过去几天我在这方面浪费了很多时间,所以我帮助这可能会对你有所帮助。

    如果你有更好的想法,请告诉我。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-05
      • 2011-03-20
      • 2014-04-20
      • 2012-07-21
      • 2019-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多