【发布时间】:2018-11-24 05:07:47
【问题描述】:
我想触发股票ScriptTagHelper (view source on GitHub),以便它模拟asp-append-version="true" 属性。
我知道使用它的正确方法是改变它:
<script src="somefile.js"></script>
到这里:
<script src="somefile.js" asp-append-version="true"></script>
这个过程非常类似于版本控制 CSS 包含和图像(LinkTagHelper 和 ImageTagHelper)。
由于我有很多包含的脚本、样式表和图像,我想稍微自动化一下。因此,与其在每个 HTML 元素上添加asp-append-version="true",我宁愿创建一个自定义的 TagHelper 来为我执行此操作。
这就是问题所在 - 它不起作用。
目前,我的 TagHelper 仅涵盖 script 标签,如下所示:
[HtmlTargetElement("script", Attributes = "src")]
public class TestTagHelper : TagHelper
{
public override int Order => int.MinValue;
public override void Process(TagHelperContext context, TagHelperOutput output)
{
if(!context.AllAttributes.ContainsName("asp-append-version"))
{
output.Attributes.SetAttribute("asp-append-version", "true");
}
}
}
但不是触发默认的ScriptTagHelper,而是直接输出
asp-append-version="true" 到输出 HTML。我还将Order 属性设置为INT_MIN,以便它在任何其他标签助手之前触发,但它仍然不起作用。
有没有办法让它工作?
【问题讨论】:
-
ASP.NET Core 不应用多个标签助手。一旦一个匹配,那就是呈现输出的那个,就是这样。如果你想做这样的事情,我建议从
ScriptTagHelper继承并简单地修改它以默认应用附加版本。它可能就像将支持属性默认设置为 true 而不是 false 一样简单,但我没有查看代码。 -
我尝试了子类化并将属性设置为 true,但它也无法正常工作。我不知道只应用了一个标签助手,我觉得这很奇怪,因为标签助手链接会非常有用。
-
如果标签助手可以被链接,那么你永远不能使用与 HTML 元素同名的标签助手。
ScriptTagHelper之类的东西可以工作,因为它只通过脚本标签,然后假定呈现 HTML。如果它继续寻找标签助手,那么它将再次运行ScriptTagHelper……然后再次……无限期地运行。
标签: c# asp.net-core asp.net-core-mvc asp.net-core-2.0 tag-helpers