从另一个 TagHelper 触发 TagHelper

2024-01-08

我想触发股票ScriptTagHelper (在 GitHub 上查看源代码 https://github.com/aspnet/Mvc/blob/dev/src/Microsoft.AspNetCore.Mvc.TagHelpers/ScriptTagHelper.cs),这样它就会模拟asp-append-version="true"属性。

我知道使用它的正确方法是对此进行更改:

<script src="somefile.js"></script>

to this:

<script src="somefile.js" asp-append-version="true"></script>

此过程与版本控制 CSS 包含和图像非常相似(LinkTagHelper and ImageTagHelper).

由于我有很多包含的脚本、样式表和图像,所以我想稍微自动化一些。所以而不是添加asp-append-version="true"在每个 HTML 元素上,我宁愿创建一个自定义 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,以便它在任何其他标记帮助程序之前触发,但它仍然不起作用。

有办法让这项工作发挥作用吗?


正如 @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);
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从另一个 TagHelper 触发 TagHelper 的相关文章

随机推荐

  • 将 c 字符串中的字符转换为其转义序列

    我需要一个像这样的函数字符串ToLiteral 字符串输入 from 这个帖子 https stackoverflow com questions 323640 can i convert a c string value to an es
  • 如何在存储过程之间共享数据[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 在 MS SqlServer 中 存
  • Lighttpd 配置,.我的查询字符串中的(点)导致 404

    我的网站上有一个地址 如下所示 http www example com lookup q http 3A 2F 2Fgigaom com 2F2010 2F10 2F10 2f Angry birds for windows 7 phon
  • Symfony2:设置 cookie

    我正在尝试在登录控制器中设置 cookie 以实现 记住我 系统 尽管我使用了在网上找到的确切代码 但对我来说事情还是出了问题 我希望你能帮我弄清楚我错过了什么 让我们看一下代码 public function loginAction Re
  • 为什么short在C中的结构体中存储为4个字节?

    我有以下两个结构 问题是 sizeof Content 返回 160 该结构由 11 个短整型 6 个整数 76 个字符 7 个浮点 1 个双精度组成 总共添加到 158 个字节 我数了三遍 还是有2个字节的差别 typedef struc
  • 如何从组件内部调用组件的destroy?

    我有一个模态组件 我希望能够在用户单击 x 按钮时销毁它 我还有一个通知弹出窗口 它会在一段时间后自行销毁 但我想让用户能够通过以下方式关闭它 x 按钮也是如此 我知道我可以将事件传递给组件 但我认为如果组件具有自毁性 那就更好了 对于这种
  • Eclipse C/C++ 中的发现选项

    我不是一名程序员 最近才决定深入研究使用 Eclipse C C 来编程 ARM 微控制器 而我的问题是设置 IDE 基本上 我遵循这里的方向 https openwsn atlassian net wiki display OW GNU
  • 使用 tomcat 管理器应用程序相对于复制到 webapp 目录的优点

    我最近一直在思考 为什么要使用 tomcat 管理器来部署 取消部署 war 到你的服务器 与简单地将其复制到 webapps 文件夹方法和从 webpass 文件夹删除方法相比 其优点 缺点是什么 另外 当删除战争时 tomcat 的清理
  • 二进制 R 热图仍然显示梯度

    我正在尝试在 R 中绘制二进制数据矩阵 11 x 1500 的热图 heatmap y col hmcols 矩阵 y 看起来像这样 1 2 3 4 5 6 7 8 9 10 11 12 13 1 0 0 0 0 1 1 1 1 1 1 1
  • Swift 中的图像加密

    我在用IDZSwiftCommonCrypto使用 StreamCryptor 进行图像加密 其 GitHub 页面上有一个示例 https github com iosdevzone IDZSwiftCommonCrypto https
  • C# 折线图如何创建垂直线

    我有一个折线图 例如这样 我想画一条垂直线 其底部有一个标签 当我将标签拖动到这些 x 点上方时 我希望该标签以其垂直线穿过图表的 x 点 我将得到带标签的线与 Y 轴匹配的 y 点 例如 我怎样才能做到这一点 此解决方案允许您左右拖动注释
  • 在Java中,如何测试数组是否包含相同的值?

    我正在寻找一种方法来检测数组 列表 中的所有对象是否相同 e G arraylist1 1 1 1 1 elements are the same arraylist2 1 1 0 1 elements are not the same 感
  • Java9多模块Maven项目测试依赖关系

    我有一个包含三个模块的多模块 Maven 项目core utils and test utils Core 有以下依赖定义
  • 从 Java 调用 Haskell,中间用 C 调用

    这可能听起来像一场噩梦 但我真的很想让它发挥作用 我大部分时间都在使用这个例子 从 Haskell 调用 C http www haskell org haskellwiki Calling Haskell from C我正在尝试让它在 u
  • 我可以彻底删除 firebase CLI 项目吗?

    我在错误的目录中运行 firebase init 它已连接到我的项目 要撤消该操作 我可以从终端删除 firebase json 和 my newly created folder name 吗 谢谢 你应该删除firebase json
  • 在没有模型对象的 Rails 4 中覆盖 render:json

    我需要覆盖 render json 但我不需要为模型覆盖它 在模型中我知道我可以打开 ActiveRecord Base 并覆盖 as json 方法 但我的问题是当我有这样的事情时 class TestController lt Appl
  • 等待不同类型的任务

    IEnumerable
  • RemoveRange() 方法如何在 List<> 中工作?

    如标题所示 我知道它可能会合并删除项目之前和之后的 2 个子列表 但是在删除 LAST 元素时该方法的行为如何 换句话说 它是否以某种方式复制了删除索引之前的所有元素 我只是好奇在一个巨大的列表 假设有 5000 个元素 上使用 Remov
  • 使用 2 个字符单词的 MySql 全文搜索

    我已经设置了ft min word len 1和跑步show variables like ft 也显示同样的情况 还已经通过删除并重新创建全文索引来更新它们 但当我跑步时SELECT OriginalProductName FROM pr
  • 从另一个 TagHelper 触发 TagHelper

    我想触发股票ScriptTagHelper 在 GitHub 上查看源代码 https github com aspnet Mvc blob dev src Microsoft AspNetCore Mvc TagHelpers Scrip