it-swarm.com.de

Probleme mit der ASP.Net-Masterseite und dem Dateipfad

Ich versuche, auf meiner Masterseite einen Skriptverweis auf jQuery hinzuzufügen, damit er für jede Seite funktioniert. Es sieht derzeit so aus

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

Das Problem ist, dass der Pfad immer relativ zur ausgeführten Aspx-Seite ist. Dies funktioniert nur, wenn sich die Datei "jquery.js" im selben Ordner befindet. Damit es funktioniert, muss ich die Zeile ändern in:

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

Dies ist offensichtlich weniger als ideal, da es nur für Seiten funktioniert, die zwei Ebenen vom Stammordner entfernt sind. Wenn ich Folgendes versuche, gibt IIS einen Fehler bezüglich eines unerwarteten Zeichens aus.

<script runat="server" type="text/javascript" src="~/jquery.js"></script>

Irgendwelche Ideen?

EDIT: Ich habe auch vergessen zu erwähnen, dass das Skript MUSS im head Tag sein

Bei der aktuellen Antwort wird der Fehler "ASP.NET Ajax-clientseitiges Framework konnte nicht geladen." Ausgegeben, wenn ich es meiner Masterseite hinzufüge. Es wurde von Javascript geworfen und nicht vom .Net-Compiler. Wenn ich den ScriptManager in den Head-Bereich verschiebe, wo er sich befinden sollte, erhalte ich einen Kompilierungsfehler, wenn der ScriptManager in einem Form-Tag enthalten sein muss.

Die dritte Antwort löst eine "Illegal Zeichen in Pfad." -Ausnahme des Compilers aus

EDIT 2: Wenn ich diese Zeile zu meinem Head-Tag hinzufüge, erhalte ich diesen Fehler von IIS.

Die Controls-Auflistung kann nicht geändert werden, da das Steuerelement Codeblöcke enthält (d. H. <% ...%>).

Gelöst: Ich habe die bearbeitete Antwort aus der Antwort unten genommen und sie in ein asp: ContentPlaceHolder -Element eingefügt

74
TheDude

Sie könnten eine ScriptManager verwenden:

<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Scripts>
        <asp:ScriptReference Path="~/jquery.js" />
    </Scripts>
</asp:ScriptManager>

EDIT: Wenn Sie absolut in Ihrem <head>-Abschnitt benötigen, können Sie Folgendes tun:

<head>
    <script type="text/javascript" 
        src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>

EDIT 2: Entsprechend den Kommentaren, wenn Sie das beobachten

Die Controls-Auflistung kann nicht geändert werden, da das Steuerelement Codeblöcke enthält (d. H. <% ...%>).

möglicherweise müssen Sie das Obige ändern, um die Datenbindungssyntax zu verwenden:

<head>
    <script type="text/javascript" 
        src="<%# Page.ResolveClientUrl("~/jquery.js") %>"></script>
</head>
107
Cᴏʀʏ

Versuchen Sie <%# anstelle von <%= in der Masterseite im Kopfbereich 

<script type="text/javascript" 
        src="<%# ResolveUrl("~/YourScriptFolder/YourJQueryOrJavascript.js") %>">
</script>

Dann in Code hinter der Masterseite unter Page_Load Event

Page.Header.DataBind();

Nun können Sie sowohl mit jQuery und JavaScript als auch mit CSS arbeiten. Sie müssen lediglich Ihren Pfad in ResolveUrl ändern, welche Datei Sie mit CSS, JavaScript und jQuery behandeln möchten.

25
Siddiq Baig

Wenn Sie nicht zu uns asp: ScriptManager oder absolute Pfade gehen, können Sie dies folgendermaßen tun:

<script runat="server" type="text/javascript" 
  src='<%= Page.ResolveUrl("~/jquery.js") %>'></script>
10
Keltex

Ich weiß nicht, ob Sie die Lösung für Ihr Problem gefunden haben oder nicht. Ich war mit dem gleichen Problem konfrontiert und verrückt geworden, um herauszufinden, warum ich die Fehlermeldung "jQuery is undefined" in den verwendeten Plugins bekomme. Ich habe alle Lösungen aus dem Internet ausprobiert, aber überhaupt kein Glück.

Aber plötzlich fällt mir etwas auf, dass die Skriptdateien in Ordnung sein sollten. Also zog ich die Jquery-Referenz an die erste Position und alles begann wie charmant zu arbeiten.

Denken Sie daran, Jungs, wenn Sie Plugins mit Jquery verwenden, stellen Sie sicher, dass Sie die folgende Reihenfolge beim Festlegen des Verweises auf diese Felder verwenden.

  1. verweis auf die Jquery-Bibliothek
  2. verweis auf die anderen nachfolgenden Plug-In-Bibliotheken und so weiter ...

z.B.:

  1. "script src =" js/jquery-1.3.2.min.js "type =" text/javascript "...
  2. "script src =" js/jqDnR.min.js "type =" text/javascript "...
  3. "script src =" js/jquery.jqpopup.min.js "type =" text/javascript "...
  4. "script src =" js/jquery.bgiframe.min.js "type =" text/javascript "...

Stellen Sie immer sicher, dass Sie zuerst die Jquery-Referenz und dann die nachfolgenden Bibliotheken einfügen müssen.

Ich hoffe, das löst Ihr Problem, insbesondere wenn Sie mit MasterPages arbeiten. Es ist sehr seltsam, dass es unabhängig von der Reihenfolge funktioniert, die Sie verwenden, wenn Sie keine MasterPages verwenden, aber wenn Sie dies tun, müssen Sie die richtige Reihenfolge festlegen.

Viel Glück und viel Spaß beim Kodieren,

Vincent D'Souza

3
Vincent D'Souza

Schauen Sie sich an Wie man eine Wurzel "/" ausführt. Dies sollte alle Ihre Probleme bezüglich nicht aufgelöster .js-Dateipfade beheben. Sie konfigurieren den VS Dev-Server grundsätzlich so, dass er Ihre Anwendung als localhost:port/ ausführt, im Gegensatz zu dem üblichen localhost:port/application name/, wodurch die Namensauflösung genauso funktioniert wie in IIS.

3
Rahul Sud
<script type="text/javascript" src="/full/path/to/jquery.js"></script>
0
karim79

Wenn dieses Skript-Tag direkt an den Browser übermittelt wird, können Sie dort wahrscheinlich das Stammverzeichnis Ihrer Site ersetzen. Zumindest nicht auf dem Server. Also kannst du:

  1. Stellen Sie die Site im Stammverzeichnis von Domänename bereit, und verwenden Sie absolute Pfade (Einfachste Lösung). 
  2. Fügen Sie thislink mit der Serversteuerung ein. 
  3. Verarbeiten Sie den resultierenden HTML-Code vor Und senden Sie ihn an den Client (mit HttpResponse.Filter).
0
XOR

Sie können auch das <base> HTML-Tag verwenden: 

<base href="http://www.domain.com"></base>  

und dann sind alle Links im Header-Abschnitt relativ zur Basisadresse: 

<script type="text/javascript" src="scripts/jquery.js"></script>

Dies ist oft nützlich, wenn Sie über mehrere Veröffentlichungsziele verfügen, z. B. einen lokalen Dev-Webserver, einen Demo-Server usw. Sie ersetzen nur die Basis-URL.

0
Hrvoje Hudo

Für den absoluten Pfad der Datei für jede Seite verwenden Sie diesen wie folgt:

<script type="text/javascript" src="<%= Page.ResolveClientUrl("~/jquery.js") %>"></script> 
0
Umesh Bagalur
<body>
<script language="javascript" src='<%= this.ResolveClientUrl("~/full/path/to/jquery.js") %>' type="text/javascript"></script>
</body>
0
Yusan Susandi