2009-01-12 9 views
21

Meine Javascript Pfade auf dieser Seite arbeiten: http://localhost:53049/CSS und Javascript relativen Pfad Verwirrung in ASP.NET MVC

Aber nicht auf dieser Seite: http://localhost:53049/Home/Messages

Der Grund dafür ist, dass die relativen Pfade unterschiedlich sind, das erstere verlangt ("js/...") und das letztere verlangt ("../../ js/...").

ich meinen Javascript in meiner Site.Master Datei einschließlich:

<script type="text/javascript" src="js/jquery.jqGrid.js"></script> 
<script type="text/javascript" src="~/js/jquery.jqGrid.js"></script> 
<script type="text/javascript" src="<%= this.ResolveClientUrl("~/Scripts/jquery-1.2.6.js") %>"></script> 

Wie erhalte ich um diesen relativen Pfad Wahnsinn, das heißt, was ist der beste Praxis Weg in ASP.NET MVC CSS setzen/JavaScript-Pfade im Site.Master, damit sie für jede Ansicht funktionieren, unabhängig davon, wie tief die URL dieser Ansicht ist.

NACHTRAG:

Es scheint, dass für den Index-Ansicht wird jeder Pfad arbeiten, seltsam:

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

Aber für alle anderen Seiten (Seiten mit einer tieferen URL), keines dieser Arbeit.

Was geht hier vor? Wie können wir den Javascript Pfad einmal in Site.Master einstellen und sie funktionieren für alle Seiten?

ADDENUM II:

Es stellte sich nur aus ein Problem mit der jqGrid Javascript-Datei (nicht die jQuery-Datei), anscheinend innerhalb dieser Datei wird andere Javascript-Dateien verweisen und durcheinander:

<script type="text/javascript" src="<%= Url.Content ("~/js/jquery.jqGrid.js") %>"></script> 
+2

wir die Dinge nicht von Ihrer localhost Maschine gebucht sehen. – jacobangel

+0

Tres LOL - hatte nicht einmal bemerkt – annakata

+3

Ich weiß (hoffe) Sie können sie nicht auf meinem lokalen Rechner sehen, ich weiß nur nicht, wie man die http's non-links mit diesem Editor macht. Punkt ist, dass die Pfade nicht funktionieren, wenn es Verzeichnisse in der URL gibt. –

Antwort

15

Sie können auch den Url.Content-Methodenaufruf verwenden, um sicherzustellen, dass die Pfade korrekt festgelegt sind.

Beispiele können here gefunden werden.

3

Versuchen Sie, das JavaScript so einzustellen, dass es am Anfang einen Schrägstrich wie "/js/jquery.jqGrid.js" verwendet. Dadurch wird festgelegt, dass die Stammdomäne anstelle der relativen Pfadangabe verwendet wird.

+3

Natürlich funktioniert das nur, wenn die Dateien wirklich in einem Ort außerhalb des Stammes der Site leben. Wenn Sie beispielsweise in einem virtuellen Verzeichnis entwickeln, aber im Stammverzeichnis bereitstellen, würde diese Methode während der Entwicklung fehlschlagen. –

13

In Bezug auf Pfade in CSS-Dokumenten verwendet:

/Content/site.css

Body {background-image:url('background.jpg');} 

Relative Pfade in CSS-Dokumenten mit dem CSS-Dokument beziehen und nicht auf das Dokument angezeigt wird.

Diese Information hat mir einige Kopfschmerzen erspart.

1

Die Lösung für jqGrid: die Datei jquery.jqGrid.js öffnen und die Zeile:

var pathtojsfiles = "js/"; // need to be ajusted 

Wie der Kommentar sagt, müssen Sie diesen Pfad bearbeiten, zum Beispiel für einen typischen ASP.NET MVC-app,

var pathtojsfiles = "/Scripts/js/"; // need to be ajusted 
+0

Wenn Sie lokal in einem virtuellen Verzeichnis/einer virtuellen Anwendung arbeiten, lautet die URL/MyApp/Scripts/js /. irgendwelche Vorschläge, was dann zu tun ist? Ich würde es hassen, die js-Datei in eine Ansicht zu verwandeln, nur damit ich URL.Content verwenden kann, und ich bin nicht zu verrückt, mich auf Änderungen an lmhosts usw. zu verlassen. Alternativen? –

+0

Kurze Antwort: Ich bin auf slickgrid umgestiegen, das dieses Problem nicht hat. –

1

Sie müssen runat="server" hinzuzufügen und den absoluten Pfad so zu spezifizieren:

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

Verwandte Themen