Wie verweise ich auf eine CSS-Datei in einer Rasiereransicht?


195

Ich weiß, wie CSS-Dateien in der Datei _Layout.cshtml festgelegt werden, aber wie sieht es mit der Anwendung eines Stylesheets pro Ansicht aus?

Ich denke hier, dass Sie in _Layout.cshtml <head>Tags haben, mit denen Sie arbeiten können, aber nicht in einer Ihrer Nicht-Layout-Ansichten. Wohin gehen die <link>Tags?

Antworten:


338

Für CSS, die auf der gesamten Site wiederverwendet werden, definiere ich sie im <head>Abschnitt _Layout:

<head>
    <link href="@Url.Content("~/Styles/main.css")" rel="stylesheet" type="text/css" />
    @RenderSection("Styles", false)
</head>

und wenn ich einige ansichtsspezifische Stile benötige, definiere ich den StylesAbschnitt in jeder Ansicht:

@section Styles {
    <link href="@Url.Content("~/Styles/view_specific_style.css")" rel="stylesheet" type="text/css" />
}

Bearbeiten: Es ist nützlich zu wissen, dass der zweite Parameter in @RenderSection, false, bedeutet, dass der Abschnitt in einer Ansicht, die diese Masterseite verwendet, nicht erforderlich ist und die Ansichts-Engine die Tatsache, dass kein Abschnitt "Stile" definiert ist, selig ignoriert aus Ihrer Sicht. Wenn true, wird die Ansicht nicht gerendert und es wird ein Fehler ausgegeben, es sei denn, der Abschnitt "Stile" wurde definiert.


4
Weißt du, beim zweiten Gedanken ist das nicht so schlimm. Ich denke, es ist einfach neu und anders.
MrBoJangles

@section Styles -> sagt, dass Section Styles nicht aufgelöst werden können. Was bedeutet das?
Revious

2
@Sam bedeutet, dass in Ihrem Layout kein solcher Abschnitt definiert ist.
Darin Dimitrov

@DarinDimitrov Gibt es eine Möglichkeit, an der exakten Position anstatt am Ende des Headers zu rendern? Ich möchte eine bestimmte Reihenfolge für die CSS-Prioritäten beibehalten.
Marc

@Marc Es wird an einer Stelle gerendert, an der Sie RenderSection(überraschenderweise :) anrufen , nicht am Ende des Headers.
David Ferenczy Rogožan

22

Ich habe versucht, einen Block wie folgt hinzuzufügen:

@section styles{
    <link rel="Stylesheet" href="@Href("~/Content/MyStyles.css")" />
}

Und ein entsprechender Block in der Datei _Layout.cshtml:

<head>
<title>@ViewBag.Title</title>
@RenderSection("styles", false);
</head>

Welches funktioniert! Aber ich kann nicht anders, als zu glauben, dass es einen besseren Weg gibt. UPDATE: In der @RenderSectionAnweisung wurde "false" hinzugefügt, damit Ihre Ansicht nicht splittert, wenn Sie es versäumen, einen @sectionAufruf hinzuzufügen head.


Es gibt keinen besseren Weg, obwohl ich den Abschnitt nennen würde "Head".
SLaks

Du bist genau richtig. Wenn Sie es "pageStyle" nennen, ist dies nur für diesen Zweck vorgesehen.
MrBoJangles

1
Wenn Sie es so machen, müssten Sie "MyStyles" in allen Ansichten hinzufügen, ich würde mit Darins Antwort gehen.
Filip Ekberg

Richtig-o. Deshalb habe ich das falsche Argument hinzugefügt @RenderSection(). Guter Fang.
MrBoJangles



1

Ich bevorzuge die Verwendung des Razor-HTML-Hilfsprogramms aus der Client Dependency-DLL

Html.RequireCss("yourfile", 9999); // 9999 is loading priority 

0

Sie können diese Struktur in der Datei Layout.cshtml

<link href="~/YourCssFolder/YourCssStyle.css" rel="stylesheet" type="text/css" />

1
Wie kann ich so ein Stylesheet pro Ansicht selektiv anwenden?
MrBoJangles

Sie können jedem Abschnitt auch eine Klasse oder ID hinzufügen und in der Kopfzeile einen Stil wie den von mofidul erwähnten haben. Ich arbeite mit sass, sodass jede Ansicht einen eigenen Klassencontainer hat. Auf diese Weise habe ich für jeden Abschnitt Sass-Seiten erstellt, die am Ende strukturierter und organisierter sind.
Leo

Was bedeutet rel = "Stylesheet"?
Sven Krauter
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.