80 Stimmen

ASP.Net Master Page und Dateipfadprobleme

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

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

Das Problem ist, dass der Pfad immer relativ zur ausführenden aspx-Seite ist, so dass dies nur funktioniert, wenn sich die Datei "jquery.js" im selben Ordner befindet. Damit es funktioniert, muss ich die Zeile zu ändern:

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

Dies ist natürlich nicht ideal, da es nur für Seiten funktioniert, die zwei Ebenen tiefer als der Stammordner liegen. Wenn ich das Folgende versuche, gibt IIS eine Fehlermeldung über ein unerwartetes Zeichen aus.

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

Irgendwelche Ideen?

EDITAR: Ich habe auch vergessen zu erwähnen, dass das Skript im head-Tag stehen MUSS

Die aktuelle Top-Antwort wirft ein " ASP.NET Ajax Client-seitiges Framework konnte nicht geladen werden. "Fehler, wenn ich es zu meiner Masterseite hinzufüge. Er wird von Javascript und nicht vom .Net-Compiler ausgelöst. Wenn ich den ScriptManager in den Kopfabschnitt verschiebe, wo er sein sollte, erhalte ich einen Kompilierungsfehler über den ScriptManager, der innerhalb eines Formular-Tags sein muss.

Die dritte Antwort führt zu einem " Unzulässige Zeichen im Pfad. " Ausnahme des Compilers

EDIT 2: Wenn ich diese Zeile zu meinem head-Tag hinzufüge, erhalte ich diese Fehlermeldung von IIS.

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

GELÖST: Ich habe die bearbeitete Antwort aus der folgenden Antwort in ein asp:ContentPlaceHolder Element

111voto

Cᴏʀʏ Punkte 101076

Sie könnten eine ScriptManager :

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

EDITAR: Wenn Sie absolut brauchen dies in Ihrem <head> könnten Sie etwa so vorgehen:

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

EDIT 2: In den Kommentaren heißt es, wenn Sie beobachten, dass

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

müssen Sie möglicherweise die obige Syntax ändern, um die Datenbindungssyntax zu verwenden:

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

27voto

Siddiq Baig Punkte 556

Versuchen Sie <%# anstelle von <%= auf der Master-Seite unter dem Abschnitt Kopf

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

Dann im Code hinter der Master-Seite unter Page_Load Veranstaltung

Page.Header.DataBind();

Jetzt können Sie sowohl mit jQuery und JavaScript als auch mit CSS arbeiten, Sie müssen nur noch den Pfad in ResolveUrl welche Datei Sie für CSS, JavaScript und jQuery verwenden möchten.

12voto

Keltex Punkte 25852

Wenn Sie asp:ScriptManager oder absolute Pfade nicht verwenden wollen, können Sie es so machen:

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

3voto

Ich weiß nicht, ob ihr die Lösung für euer Problem gefunden habt oder nicht. Ich stand vor dem gleichen Problem und werde verrückt, um herauszufinden, warum bekomme ich "jQuery ist undefiniert" Fehler auf die Plugins, die ich verwenden. Ich habe versucht, alle Lösungen, die ich aus dem Internet bekommen, aber kein Glück überhaupt.

Aber plötzlich kam mir in den Sinn, dass die Skriptdateien vielleicht in Ordnung sein sollten. Also habe ich die Jquery-Referenz an die erste Position verschoben und alles funktioniert wie geschmiert.

Denken Sie daran, Jungs, wenn Sie irgendwelche Plugins mit Jquery verwenden, stellen Sie sicher, dass Sie die folgende Reihenfolge der Einstellung Verweis 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 die Jquery-Referenz zuerst setzen müssen und dann die nachfolgenden Bibliotheken.

Ich hoffe, damit ist Ihr Problem gelöst, insbesondere wenn Sie MasterPages verwenden. Es ist sehr seltsam, dass es funktioniert, egal, welche Reihenfolge Sie verwenden, wenn Sie nicht MasterPages verwenden, aber wenn Sie tun, dann es irgendwie erfordert die richtige Reihenfolge.

Viel Glück und viel Spaß beim Codieren,

Vincent D'Souza

3voto

Rahul Sud Punkte 31

Blick auf Ausführen einer Wurzel "/" . Dies sollte alle Ihre Probleme bezüglich ungelöster .js Dateipfade. Sie konfigurieren den VS Dev-Server so um, dass Ihre Anwendung als localhost:port/ im Gegensatz zum regulären localhost:port/application name/ damit die Namensauflösung auf die gleiche Weise wie im IIS funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X