从另一个 TagHelper 触发 TagHelper
Trigger TagHelper from another TagHelper
我想触发股票 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,以便它在任何其他 Tag Helpers 之前触发,但它仍然不起作用。
有没有办法让它工作?
正如@ChrisPratt 提到的,链接 TagHelpers 是不可能的。有一个肮脏的小把戏可能会帮助您。您可以在自己的标签助手中手动新建一个 ScriptTagHelper
实例,并手动调用 Process
方法:
[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"))
{
var scriptTagHelper = new ScriptTagHelper(...) // Inject the required dependencies here
{
AppendVersion = true, // Explicitly set to true
// Map all other properties
};
scriptTagHelper.Process(context, output);
}
}
}
我想触发股票 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,以便它在任何其他 Tag Helpers 之前触发,但它仍然不起作用。
有没有办法让它工作?
正如@ChrisPratt 提到的,链接 TagHelpers 是不可能的。有一个肮脏的小把戏可能会帮助您。您可以在自己的标签助手中手动新建一个 ScriptTagHelper
实例,并手动调用 Process
方法:
[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"))
{
var scriptTagHelper = new ScriptTagHelper(...) // Inject the required dependencies here
{
AppendVersion = true, // Explicitly set to true
// Map all other properties
};
scriptTagHelper.Process(context, output);
}
}
}