Mvc: Ein ... kreieren<link/> Tag Helper mit Unterstützung für Fallback-Quellen

Erstellt am 18. Nov. 2014  ·  3Kommentare  ·  Quelle: aspnet/Mvc

Dies ist das CSS-Stylesheet-Äquivalent von #1576

Ein LinkTagHelper , das es ermöglicht, ein Fallback-Stylesheet zu laden, falls das primäre nicht geladen werden kann. Der Fehler wird festgestellt, indem ein Dummy-Tag <meta> mit einem angegebenen Klassennamen ( asp-fallback-test-class Attribut) asp-fallback-test-property Attribut) ist gleich einem angegebenen Wert ( asp-fallback-test-value ).

Verwendungszweck

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

Alle Attribute müssen vorhanden und nicht null sein, damit der Tag Helper funktioniert. Wenn welche fehlen, wird eine Warnung und keine Operation protokolliert.

Argumente

| Attributname | Typ | Einzelheiten |
| --- | --- | --- |
| asp-fallback-href | string | Die URL, auf die zurückgegriffen werden soll, wenn die primäre URL fehlschlägt (wie im href Attribut angegeben) |
| asp-fallback-test-class | string | Der im Stylesheet definierte Klassenname für den Fallback-Test |
| asp-Fallback-Test-Eigenschaft | string | Der für den Fallback-Test zu verwendende CSS-Eigenschaftsname |
| asp-Fallback-Testwert | string | Der für den Fallback-Test zu verwendende CSS-Eigenschaftswert |

Beispiel

Quell-CSHTML

 <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" />

Ausgabe-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

Hilfreichster Kommentar

Es tut mir leid, ein altes/geschlossenes Problem zu kommentieren. Gab es jemals Diskussionen über eine Option zum Testen von .css-Dateien, die keine singulären Klassen haben?

Zwei Beispiele:

  • dataTables.bootstrap.css hat mindestens zwei Selektoren, die wie table.dataTable { ... } verkettet sind, aber keine eigenständige .dataTable Klasse.

  • Ähnlich gibt es bei skin-red.css nur Nachkommen-Selektoren wie .skin-red .main-header .navbar { ... } und wiederum keine eigenständige .skin-red Klasse.

Alle 3 Kommentare

Es tut mir leid, ein altes/geschlossenes Problem zu kommentieren. Gab es jemals Diskussionen über eine Option zum Testen von .css-Dateien, die keine singulären Klassen haben?

Zwei Beispiele:

  • dataTables.bootstrap.css hat mindestens zwei Selektoren, die wie table.dataTable { ... } verkettet sind, aber keine eigenständige .dataTable Klasse.

  • Ähnlich gibt es bei skin-red.css nur Nachkommen-Selektoren wie .skin-red .main-header .navbar { ... } und wiederum keine eigenständige .skin-red Klasse.

@kylef000 das ist interessant, ich bin mir nicht sicher, wie man das auf generische Weise testen könnte, wie wir es mit dem injizierten <meta /> Element tun.

@DamianEdwards Ah, in Ordnung. Ich habe bei meiner flüchtigen Suche zu diesem Thema nicht viele Fragen dazu gefunden, daher ist es möglicherweise nicht etwas, in das es sich lohnt, Zeit zu investieren. Der wahrscheinlich beste Weg, dies zu umgehen, besteht darin, einen Fork durchzuführen, eine Testklasse (wie .skin-red-fallback-test { ... } ) innerhalb der einzelnen Datei hinzuzufügen und dann einen PR für die jeweilige Bibliothek zu erstellen, die man verwenden könnte.

Danke für die Antwort. Schätzen Sie Ihre Arbeit in allen Bereichen von C# wirklich!

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen