Styles.Render in MVC4


Antworten:


453

Es ruft die Dateien auf, die in diesem bestimmten Bundle enthalten sind, das in der BundleConfigKlasse im App_StartOrdner deklariert ist .

In diesem speziellen Fall ruft der @Styles.Render("~/Content/css")Aufruf von "~ / Content / site.css" auf.

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

22
Eine Sache zu wissen ist, dass es keine .css-Datei hinzufügt, die bereits zum Bundle minimiert ist. Beispiel: Es funktioniert nicht mit bootstrap.min.js, sondern nur mit bootstrap.js. Ich hoffe das kann anderen helfen.
Codea

5
Hier geht es um Stile, nicht um Skripte. Wenn Sie bootstrap.min.js verwenden möchten, erstellen Sie einfach ein Bundle wie das folgende: bundles.Add (neues ScriptBundle ("~ / bundles / bootstrap"). Include ("~ / Scripts / bootstrap.min.js"));
Xcalibur37

1
@codea Ich bin sicher nicht das, was Ihre Set-up, aber standardmäßig bundler nehmen *.min.*über *.*Dateien.
Skmasq

@skmasq, zum Zeitpunkt des Schreibens dieser Zeilen habe ich VS2013 verwendet. Möglicherweise haben sich die Dinge bis jetzt geändert. Vielen Dank für die Erwähnung :)
Codea

Ich verstehe es nicht ... warum sollten Sie sich die Mühe machen, Bundles zu erstellen und diese Pfade zu diesen verrückten Klassen in MVC hinzuzufügen, wenn Sie der Datei auf Ihrer Webseite einfach einen CSS-<Link> hinzufügen können? Wenn Sie alle Ihre CSS-Links zu Ihren Stylesheets beispielsweise in einer Layoutdatei oder einer Teilansicht hinzufügen, können Sie sie auch an einem einfachen Ort verwalten. Dies ist auch ein schlechtes Design für solche Hardcode-Stilpfade, da Sie keine CSS-Skins mehr erstellen können, was der gesamte Zweck des CSS-Systems war, als es vor 20 Jahren entworfen wurde.
Stokely

34

Achten Sie auf Groß- und Kleinschreibung. Wenn Sie eine Datei haben

/Content/bootstrap.css

und Sie leiten in Ihrer Bundle.config weiter

.Include ("~ / Content / Bootstrap.css")

Das CSS wird nicht geladen.


Außerdem: Das zweite Include wird anders geschrieben.
Dan Esparza

1
Gibt es auch Unterstützung für Sass / Less-Dateien?
Mantikor

12

Ein bisschen spät zur Party. Aber es scheint, als hätte niemand die
Bündelung und Minimierung von erwähnt StyleBundle.

@Styles.Render("~/Content/css") 

ruft an Application_Start():

BundleConfig.RegisterBundles(BundleTable.Bundles);            

was wiederum ruft

public static void RegisterBundles(BundleCollection bundles)
{
    bundles.Add(new StyleBundle("~/Content/css").Include(
              "~/Content/bootstrap.css",
              "~/Content/Site.css"));
}

RegisterBundles()effektiv kombiniert & minimiert bootstrap.css & Site.css
in einer einzigen Datei,

<link href="/Content/css?v=omEnf6XKhDfHpwdllcEwzSIFQajQQLOQweh_aX9VVWY1" rel="stylesheet">

Aber ..

<system.web>
  <compilation debug="false" targetFramework="4.6.1" />
</system.web>

nur wenn debug auf falsein gesetzt ist Web.config.
Ansonsten bootstrap.css& Site.csswird individuell serviert.
Nicht gebündelt oder minimiert:

<link href="/Content/bootstrap.css" rel="stylesheet">
<link href="/Content/Site.css" rel="stylesheet">

0

src="@url.content("~/Folderpath/*.css")" sollte Stile rendern


0

Wie in App_start.BundleConfig definiert, wird nur aufgerufen

bundles.Add(new StyleBundle("~/Content/css").Include("~/Content/site.css"));

Es passiert nichts, auch wenn Sie diesen Abschnitt entfernen.


0

Polo Ich würde Bundles in MVC aus mehreren Gründen nicht verwenden. In Ihrem Fall funktioniert dies nicht, da Sie eine benutzerdefinierte BundleConfig-Klasse in Ihrem Ordner Apps_Start einrichten müssen. Dies macht keinen Sinn, wenn Sie einfach einen Stil in den Kopf Ihres HTML-Codes einfügen können:

<link rel="stylesheet" href="~/Content/bootstrap.css" />
<link rel="stylesheet" href="~/Content/bootstrap.theme.css" />

Sie können diese auch zu einer Layout.cshtml- oder Teilklasse hinzufügen, die aus all Ihren Ansichten aufgerufen und auf jeder Seite abgelegt wird. Wenn sich Ihre Stile ändern, können Sie den Namen und den Pfad leicht ändern, ohne sie neu kompilieren zu müssen.

Das Hinzufügen von fest codierten Links zu CSS in einer Klasse unterbricht den gesamten Zweck, die Benutzeroberfläche und das Design vom Anwendungsmodell zu trennen. Sie möchten auch keine fest codierten Stylesheet-Pfade, die in c # verwaltet werden, da Sie keine "Skins" oder separaten Stilmodelle mehr erstellen können, z. B. für verschiedene Geräte, Themen usw. wie folgt:

<link rel="stylesheet" href="~/UI/Skins/skin1/base.css" />
<link rel="stylesheet" href="~/UI/Skins/skin2/base.css" />

Mit diesem System und Razor können Sie jetzt den Skin-Pfad aus einer Datenbank- oder Benutzereinstellung heraus wechseln und das gesamte Design Ihrer Website ändern, indem Sie den Pfad einfach dynamisch ändern.

Der gesamte Zweck von CSS vor 15 Jahren bestand darin, sowohl benutzergesteuerte als auch anwendungsgesteuerte Stylesheet- "Skins" für Websites zu entwickeln, damit Sie das Erscheinungsbild der Benutzeroberfläche getrennt von der Anwendung ändern und den Inhalt unabhängig von der Datenstruktur neu verwenden können. .... zum Beispiel eine druckbare Version, eine mobile Version, eine Audioversion, eine rohe XML-Datei usw.

Indem wir jetzt zu diesem "altmodischen", fest codierten Pfadsystem zurückkehren, das C # -Klassen, starre Stile wie Bootstrap verwendet und die Themen von Websites mit Anwendungscode zusammenführt, sind wir wieder rückwärts zu der Art und Weise gegangen, wie Websites 1998 erstellt wurden.


1
Also, zum Teufel damit minification? : s / :(
Scott Fraley

Ja. Warum minimieren Entwickler 2019 CSS und Javascript, erstellen dann aber APIs wie Angular und andere, die Megabyte an unnötigem ECMAScript (Javascript) an Clients senden? Früher haben wir weniger Code oder komprimierten Code an Kunden mit begrenzter Bandbreite gesendet, damit diese den Code erhalten konnten, wenn sie durch die Bandbreite eingeschränkt waren ... dh 14.000 Baud-Modems. Wir haben 5G im Angebot, daher ist keine Codekomprimierung wie GIF-Komprimierung oder Minimierung erforderlich. Wir haben jedoch infolgedessen große Mengen an Skripten an Kunden gesendet. Warum also etwas minimieren?
Stokely

1
Weil wir so wenig wie möglich über das Kabel senden sollten? Ich versuche auf jeden Fall, die Dinge auf ein Minimum zu beschränken.
Scott Fraley

0

Ich habe alles Notwendige getan, um einem MVC 3-Web eine Bündelung hinzuzufügen (ich bin neu in der vorhandenen Lösung). Styles.Renderhat bei mir nicht funktioniert. Endlich stellte ich fest, dass mir einfach ein Doppelpunkt fehlte. Auf einer Masterseite: <%: Styles.Render("~/Content/Css") %> Ich bin immer noch verwirrt darüber, warum (auf derselben Seite) ohne Doppelpunkt <% Html.RenderPartial("LogOnUserControl"); %>funktioniert .

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.