2009-08-07 17 views
4

Wir haben einige Probleme mit der Aufnahme von Javascript in Masterpages. Die "~ /" Wurzelverknüpfung scheint nicht zu funktionieren, und so müssen wir den Pfad zu dem Javascript, von dem es verwendet wird, manuell eingeben, zum Beispiel: "../../tooltip.js"Wie man Javascript in Asp.net Masterseiten einfügt

Das Problem ist jedoch, dass, wenn die verschachtelte Seite in einem anderen Pfad ist, dieser Ansatz nicht funktioniert, da der Pfad derselbe bleibt, obwohl die verschachtelte Seite an einem anderen Speicherort ist - Lösungen, wie Sie den Pfad automatisch erhalten Arbeiten wie für die CSS-Dateien?

Danke!

Antwort

7

Die ~/ ist eine spezielle Entität in ASP.NET, die den "Anwendungsstamm" darstellt. Die Übersetzung erfolgt nur, wenn Sie diese URL über ein ASP.NET-Serversteuerelement wie <asp:Image runat="server" ImageUrl="~/path..." /> übergeben. Versucht man es in etwas zu verwenden, das als literaler Text direkt an den Client übergeben wird, so wird zB genau das im Browser gerendert.

Es gibt ein paar Lösungen für dieses:

  1. Legen Sie Ihre Skripte in einer vorhersagbaren Stelle in Bezug auf den Domänenstamm, wie domain.com/scripts/script.js, und Sie können als /scripts/script.js darauf verweisen. Der vorangehende / teilt dem Client (Browser) mit, dass es sich um einen absoluten Pfad vom Domain-Root handelt.

  2. Verwenden Page.ResolveClientUrl den richtigen Pfad (<%=Page.ResolveClientUrl("~/script./js")%>)

  3. Erstellen Sie Ihr eigenes Server-Steuerelement zu machen, die die ~/ Auflösung verarbeitet.

  4. Betten Sie das Skript als assembly resource ein.

+0

Vielen Dank für die detaillierte Lösung - die absolute Pfad-Methode scheint einfach genug, wenn es funktioniert. – stringo0

-1

Können Sie erklären, was Sie mit dem "~ /" nicht funktioniert? Es sollte genau das sein, wonach Sie suchen. Sie können überprüfen, ob Ihr Kopf das runat = "server" Attribut hat, da dies das Funktionieren des "~ /" verhindern könnte.

+0

nicht sicher, was die nach unten Abstimmung war für seit dem, was ich sagte, ist wahr ... - Hmmm ... – Hugoware

+0

Die ~/löst nicht richtig für Javascript enthält Tags. (Ich habe jedoch nicht abgestimmt) – stringo0

+0

Bah! Ich stehe korrigiert!! - Ich wusste, dass es für Tags im head-Tag funktioniert (wie für Stylesheets) - Habe nicht gemerkt, dass es nicht für Skripte funktioniert! – Hugoware

0

Versuchen

<script type="text/javascript" src=<%=Request.ApplicationPath+"/Scripts/Script_Name"%>></script> 

Ich habe mit url worden Umschreiben und "~" Drosseln gelegentlich auf Sonderzeichen in der URL, auch wenn sie verschlüsselt sind.

5

Cory Larson recommends:

<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/tooltip.js") %>"></script> 
+0

Dies ist der richtige Weg, verpasste die Tilde. Das funktioniert, ich werde meins entfernen. – ScottE

+0

Ich bin für eine etwas andere Syntax: '' –

+0

Danke für die schnelle Lösung! – stringo0

0

Wenn der Script-Tag im HEAD-Elemente ist nur einen Pfad verwenden, das die Master-Seite ist relativ und asp.net wird die Referenz für Sie automatisch beheben. Stellen Sie nur sicher, dass das HEAD-Element das Attribut runat = "server" hat.

Dies funktioniert auch sehr gut für CSS-Dateien. Es ist der einzige Weg, wie ich sie im VS.NET-Designer lösen konnte.Hier

ist eine Probe von meinem Projekt:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head id="Head1" runat="server"> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
    <link rel="stylesheet" type="text/css" href="../styles/reset.css" /> 
    <link rel="stylesheet" type="text/css" href="../styles/960.css" /> 
    <link rel="stylesheet" type="text/css" href="../styles/default.css" /> 
    <link rel="stylesheet" type="text/css" href="../styles/buttons.css" /> 
    <script type="text/javascript" src="../jQuery/jquery-1.3.2.js"></script> 
</head> 
0

Linked Style Sheets können (mit runat = "server") und verwenden Sie einen ~ im Header gesetzt werden, um die Wurzel zu lösen. JavaScript-Dateien können jedoch nicht auf diese Weise referenziert werden. Eine weitere Möglichkeit zum Hinzufügen von Skripts ist ein Skriptmanager im Hauptteil.

<html> 
<head runat="server"> 
    <title>title</title> 
    <link href="~/Styles/Site.css" rel="stylesheet" type="text/css" /> 
</head> 
<body> 
<form runat="server"> 
<asp:ScriptManager ID="ScriptManager" runat="server" EnablePageMethods="true"> 
    <Scripts> 
     <asp:ScriptReference Path="~/Scripts/jquery-1.4.2.js" /> 
     <asp:ScriptReference Path="~/Scripts/jquery-ui-1.8.custom.min.js" /> 
    </Scripts> 
</asp:ScriptManager> 
</body> 
</html> 
Verwandte Themen