Mvc: 创建一个<link/>支持回退源的标签助手

创建于 2014-11-18  ·  3评论  ·  资料来源: aspnet/Mvc

这是等效于 #1576 的 CSS 样式表

LinkTagHelper允许在主要加载失败的情况下加载回退样式表的规范。 失败是通过注入具有指定类名( asp-fallback-test-class属性)的虚拟<meta>标签,然后测试该元素的计算样式以查看指定的 CSS 属性( asp-fallback-test-property属性)等于指定值( asp-fallback-test-value )。

用法

<link href=""
      asp-fallback-href=""
      asp-fallback-test-class=""
      asp-fallback-test-property=""
      asp-fallback-test-value="" />

Tag Helper 的所有属性都必须存在且非空才能运行。 如果有任何缺失,它将记录警告和无操作。

参数

| 属性名称 | 类型 | 详情 |
| --- | --- | --- |
| asp-fallback-href | string | 如果主要的 URL 失败(在href属性中指定),则回退到的 URL |
| asp-fallback-test-class | string | 用于回退测试的样式表中定义的类名 |
| asp-fallback-test-property | string | 用于回退测试的 CSS 属性名称 |
| asp-fallback-test-value | string | 用于回退测试的 CSS 属性值 |

例子

源代码

 <link href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet"
       asp-fallback-href="~/lib/bootstrap/css/bootstrap.min.css"
       asp-fallback-test-class="hidden" asp-fallback-test-property="visibility" asp-fallback-test-value="hidden" />

输出 HTML

<link href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.0/css/bootstrap.min.css" rel="stylesheet" />
<meta name="x-stylesheet-fallback-test" class="hidden" />
<script>
    (function (a, b, c) {
        var d = document,
            s = d.getElementsByTagName("SCRIPT"),
            meta = s[s.length-1].previousSibling;
        (d.defaultView.getComputedStyle(meta)[a] === b ||
            d.write('\u003clink rel="stylesheet" href="' + c + '" /\u003e'));
    })("visibility", "hidden", "/lib/bootstrap/css/bootstrap.min.css");
</script>
3 - Done enhancement feature-Tag-Helpers

最有用的评论

很抱歉对旧的/已关闭的问题发表评论。 是否曾讨论过测试没有单一类的 .css 文件的选项?

两个例子:

  • dataTables.bootstrap.css至少有两个选择器像table.dataTable { ... }一样链接在一起,但没有独立的.dataTable类。

  • skin-red.css类似,只有像.skin-red .main-header .navbar { ... }这样的后代选择器,并且没有独立的.skin-red类。

所有3条评论

很抱歉对旧的/已关闭的问题发表评论。 是否曾讨论过测试没有单一类的 .css 文件的选项?

两个例子:

  • dataTables.bootstrap.css至少有两个选择器像table.dataTable { ... }一样链接在一起,但没有独立的.dataTable类。

  • skin-red.css类似,只有像.skin-red .main-header .navbar { ... }这样的后代选择器,并且没有独立的.skin-red类。

@kylef000这很有趣,我不确定人们会如何像我们使用注入的<meta />元素那样以通用方式测试它。

@DamianEdwards啊,好吧。 在我对此事的粗略搜索中,我没有看到太多与此相关的问题,因此这可能不值得花时间研究。 解决这个问题的最好方法可能是 fork,在单个文件中添加一个测试类(如.skin-red-fallback-test { ... } ),然后为可能使用的任何特定库创建 PR。

感谢您的答复。 真的很感谢你在 C# 方面所做的一切!

此页面是否有帮助?
0 / 5 - 0 等级