2008-09-15 3 views
2

Ich habe angefangen, ein wenig mit Masterseiten für eine ASP.net mvc-Site zu arbeiten, und ich bin auf eine Frage gestoßen. Wenn ich in einem Stylesheet auf der Masterseite verlinke, scheint es, den Pfad zu dem Blatt korrekt zu aktualisieren. Das ist in dem Code, den ich habePfade in Masterseiten

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

aber an der Quelle suchen, sobald die Seite zu einem Browser zugeführt wird, ich

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

erhalten, die perfekt ist. Die gleiche Pfadübersetzung scheint jedoch für Skriptdateien nicht zu funktionieren.

<script src="../../Content/menu.js" type="text/javascript"></script> 

kommt nur als das Gleiche heraus. Es scheint immer noch auf einer Top-Level-Seite zu funktionieren, aber ich vermute, dass nur der Browser/Webserver meinen Fehler korrigiert. Gibt es eine Möglichkeit, den Quellpfad auch zu globalisieren?

Antwort

3
<script src="<%= ResolveClientUrl("~/Content/menu.js") %>" type="text/javascript"></script> 
+0

Ehrfürchtig wickeln, das ist genau das, was in Web gefehlt hat Seiten seit ihrer Einführung – stimms

+0

Wenn dies in der ist, können Sie besser mit <% # und dem Aufrufen von Databind statt. <% = verhindert, dass Sie dynamisch zum Container hinzufügen, was viele Web-Steuerelemente automatisch tun – Keith

0

Verwenden Sie stattdessen:

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

Das wird nicht funktionieren - die ~/ist Server-Seite ersetzt, so dass Sie ein runat = „server“ hinzufügen müssen oder die Position in einem ResolveClientUrl – Keith

1

eine Erweiterungsmethode machen. Hier ist eine Methode:

public static string ResolveUrl(this HtmlHelper helper, string virtualUrl) 
{ 
    HttpContextBase ctx = helper.ViewContext.HttpContext; 
    string result = virtualUrl; 

    if (virtualUrl.StartsWith("~/")) 
    { 
     virtualUrl = virtualUrl.Remove(0, 2); 

     //get the site root 
     string siteRoot = ctx.Request.ApplicationPath; 

     if (!siteRoot.EndsWith("/")) 
      siteRoot += "/"; 

     result = siteRoot + virtualUrl; 
    } 
    return result; 
} 

Anschließend können Sie Ihr Skript ref schreiben wie:

<script type="text/javascript" src="<%= Html.ResolveUrl("~/Content/menu.js")%>"></script> 
0

oder Sie können BASE-Tag in Sie HEAD-Bereich Webseite. Alle Links, die Sie dann verlinken, beziehen sich auf den Ort, der im "base" -Tag eingegeben wurde, und Sie müssen nicht "../../" und "~" verwenden. Außer Links in CSS-Dateien (Hintergrund-URL usw.), wobei Links relativ zum Speicherort der CSS-Datei sind.