2008-09-04 17 views
9

Ich arbeite an einem C#/ASP.NET-Projekt, das alle Javascript-Dateien in einem/Javascript-Ordner enthält. Wenn ich die JS-Datei mit folgender Syntax referenziere: src = "/ Javascript/jsfile.js", wird die Datei korrekt aufgenommen, wenn das Projekt im Root der URL bereitgestellt wird.Wie referenziere ich eine Javascript-Datei?

Wenn diese "Website" jedoch in einem Unterordner der Haupt-URL bereitgestellt wird, funktioniert dies nicht. Die Lösung könnte also sein, relative URLs zu verwenden - aber es gibt auch ein Problem damit, da die Masterseiten viele JavaScript-Dateien referenzieren und diese Masterseiten von Seiten im root und in Unterordnern in vielen Ebenen verwendet werden können.

Hat jemand irgendwelche Ideen, um das zu lösen?

Antwort

11

Wenn Sie die JS-Datei in einem Abschnitt "runat = server" referenzieren, könnten Sie src = "~/Javascript/jsfile.js" schreiben und es wird immer funktionieren.

Sie könnten dies auch in Ihrem Page_Load (In Ihrer Masterpage):

Page.ClientScript.RegisterClientScriptInclude("myJsFile", Page.ResolveClientUrl("~/Javascript/jsfile.js")) 
4

so etwas wie dieses Versuchen in der Master-Seite:

<script type="text/javascript" src="<%= Response.ApplyAppPathModifier("~/javascript/globaljs.aspx") %>"></script> 

Aus irgendeinem Grunde habe ich festgestellt das Die Browser sind ziemlich nervtötend bezüglich des finalen Tags. Das Beenden des Tags mit /> scheint also nicht zu funktionieren.

0

@ Jared: IE braucht das/Skript. FF ist es egal.

4

Die brandneue Version von ASP.NET (3.5 SP1) hat eine nette Funktion namens CompositeScript. Auf diese Weise können Sie eine ScriptManager verwenden, um viele winzig kleine .js-Dateien serverseitig zu referenzieren und sie als eine einzige .js-Datei an den Client zu liefern.

Gut für den Client, da es nur eine Datei herunterladen muss. Gut für Sie, da Sie die Dateien auf der Server-Seite wie gewünscht verwalten können.

<asp:ScriptManager ID="ScriptManager1" 
    EnablePartialRendering="True" 
    runat="server"> 
    <Scripts> 
     <asp:ScriptReference 
      Assembly="SampleControl" 
      Name="SampleControl.UpdatePanelAnimation.js" /> 
    </Scripts> 
</asp:ScriptManager> 
0

Sie möchten vielleicht einen Blick auf FileResolver werfen. Es ist ein HTTP-Handler, die Sie dies tun können:

<link rel="stylesheet" href="~/resources/stylesheet.css.ashx" /> 

Und haben die Tilde (sowie alle Tilden innerhalb der Datei) richtig erweitert.

Verwandte Themen