2010-01-20 5 views
11

Ich habe eine Masterseite, die in/Views/Shared ist. Die Masterseite verweist auf ein Stylesheet im Ordner /Content.ASP.NET MVC - Referenzieren von Stylesheets in der Masterseite

Alles funktioniert gut, wenn ich das Stylesheet unter Verwendung "../../Content/style.css" referenziere. Meine Webanwendung befindet sich jedoch nicht in der Produktionsumgebung im Stammordner, daher funktioniert der relative Pfad nicht.

Ich habe versucht "<% = ResolveUrl (" ~/content/style.css ")%>" das funktioniert im Produktionsszenario, aber dann beschwert sich der Designer in Visual Studio über meine Klassen falsch (und ich kann die Seite nicht mit CSS in der Entwurfsregisterkarte anzeigen).

Gibt es eine Lösung, die in beiden Situationen funktioniert? Ich habe dies in WebForms erreicht, indem ich serverseitigen Code geschrieben habe, der das Link-Tag zurückgesetzt hat. Ich könnte das hier tun, aber ich möchte es vermeiden.

+0

* "Meine Webanwendung befindet sich nicht im Stammordner" * ... Ein relativer Pfad verweist nicht auf den Stammordner. Daher bin ich mir nicht sicher, warum dies wichtig wäre. Sind Sie sicher, dass sich Ihr Inhaltsordner am gleichen ** relativen ** Speicherort auf dem Produktionsserver befindet? –

+0

Der relative Pfad ist in Produktion und Entwicklung gleich. Der relative Pfad ist korrekt, wenn er relativ zur Masterseite ist. Der Pfad ist jedoch nicht relativ zu der Seite, die die Masterseite verwendet. Dies ist der Pfad, den der Browser des Benutzers verwendet. –

Antwort

8

Versuchen Sie diese Technik - schließen Sie Ihr Stylesheet beide Wege ein. Fügen Sie einen mit einem festen Pfadverweis hinzu, den Visual Studio für die Entwurfszeitunterstützung verwendet, aber schließen Sie ihn in serverseitige Kommentare ein, sodass er während der Laufzeit nicht wirklich enthalten ist. Der zweite Verweis ist der "echte" Verweis, der zur Laufzeit verwendet wird, und mit Url.Content() funktioniert es, ob Ihre Anwendung ein Unterverzeichnis ist oder nicht.

<% /* %> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
<% */ %> 

<link href="<%=Url.Content("~/Content/Site.css") %>" rel="stylesheet" 
     type="text/css" /> 
+0

+1 Interessante Technik! Ich würde T4MVC verwenden, um dies auch zu tun. –

+0

Ich mag diese Idee. Es ist ein Workaround, aber es erfüllt beide Anforderungen. Es wäre nett, wenn der ASPX-Designer bei der Vorschau der Seite serverseitigen Code parsen würde. –

+0

Sie können auch die statische Verbindung runat = "server" visible = "false" machen, was etwas einfacher ist. –

6

Es ist die beste Praxis zu Extend the URL Helper. Auf diese Weise können Sie es einfach aus Ihrer Sicht aufrufen. Wenn sich Ihre Struktur oder Ihre Dateien ändern, müssen Sie keine massive Suche/Ersetzung durchführen.

+0

Warum ist dies eine bewährte Methode? –

+0

, so dass Sie es leicht in Ihrer Sicht beziehen können, und wenn sich eines davon ändert, müssen Sie nicht suchen/ersetzen. – Martin

+0

Ich verstehe Ihren Punkt, aber es löst nicht das Problem, dass der VS-Designer den CSS-Speicherort nicht auflöst. –

0

Im Ordner "Ansichten" und dann in den Ordner "Freigegeben" gelangen, um zu verstehen, wie die CSS-Datei im MVC referenziert wird.