【问题标题】:HtmlHelper to render nested Tag Helpers in MVC 6 vNextHtmlHelper 在 MVC 6 vNext 中呈现嵌套的 Tag Helpers
【发布时间】:2016-02-23 16:27:50
【问题描述】:

问:有没有办法使用 IHtmlHelper 扩展来渲染标签助手的输出?

信息:我正在使用 ASP.NET 5 / MVC 6 (vNext) 在视图中呈现以下内容:

<cache expires-after="@TimeSpan.FromSeconds(5)">
    <div custom-tag-helper-parm="9289"></div>        
</cache>

我现在有一个 HtmlHelper 扩展方法来编写这段 HTML:

public static HtmlString RenderPortalContent(this IHtmlHelper HtmlHelper, string customTagHelperParm)
{              
        var output = $@"<cache expires-after='{@TimeSpan.FromSeconds(5)}'>
                            <div custom-tag-helper-parm = '{customTagHelperParm}'>
                            </div>
                        </cache>";      

        return new HtmlString(output);
}

目前,正如预期的那样,HTML 是按字面意思输出的。换句话说,&lt;cache&gt;custom-tag-helper-parm TagHelpers 都不会被处理。

有没有办法使用这样的 IHtmlHelper 扩展来呈现标签助手的输出?

【问题讨论】:

  • 您到底想实现什么?具体来说,您想用“customTagHelperParm”做什么?你打算怎么称呼这个助手?
  • 您可以创建自己的标签助手来呈现嵌套标签助手,而不是呈现嵌套标签助手的html助手。例如见this answer
  • 您最终找到了解决方法吗?目前我认为构建自定义 taghelper 是实现我想要的唯一方法。
  • 不,我一直无法找到解决方案,只是最终解决了它。

标签: asp.net-core asp.net-core-mvc


【解决方案1】:

如果我的理解是正确的,你想做类似的事情

@Html.RenderPortalContent("blah")

在你看来。如果是这样,你可以这样做:

public static HtmlString RenderPortalContent(this IHtmlHelper htmlHelper, string parameter)
{
    var cache = new TagBuilder("cache");
    cache.Attributes.Add("expires-after", TimeSpan.FromSeconds(5).Seconds.ToString());
    var div = new TagBuilder("div");
    div.Attributes.Add("custom-tag-helper-parm", parameter);

    cache.InnerHtml.Append(div);

    var writer = new System.IO.StringWriter();
    cache.WriteTo(writer, new HtmlEncoder());
    return new HtmlString(writer.ToString());
}

然而,如果你想扩展你的标签以允许内部标签和更大的灵活性,你实际上需要编写自己的 TagHelper。幸运的是,这些并不难写。


编辑:您是否尝试过使用ViewComponents

【讨论】:

  • 除非我遗漏了一些东西,否则这似乎仍然会从字面上呈现构建的 HTML。 IE。我在最终的 HTML 中得到了一个实际的“”元素。如果我将那个“”元素直接放入视图文件中,它将被处理并替换为给定键的内存缓存中的内容。
猜你喜欢
  • 1970-01-01
  • 2017-04-20
  • 2015-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多