2008-09-04 22 views
9

Estoy trabajando en un proyecto C#/ASP.NET que tiene todos los archivos javascript en una carpeta/Javascript. Si me refiero al archivo JS usando esta sintaxis: src = "/ Javascript/jsfile.js", entonces el archivo se recoge correctamente si el proyecto se implementa en la raíz de la URL.¿Cómo hago referencia a un archivo javascript?

Sin embargo, si este "sitio web" se implementa en una subcarpeta de la URL principal, esto no funcionará. Entonces, la solución podría ser utilizar URL relativas, pero también hay un problema porque las páginas maestras hacen referencia a muchos de los archivos javascript y estas páginas maestras pueden ser usadas por páginas en la raíz y en subcarpetas de muchos niveles.

¿Alguien tiene alguna idea para resolver esto?

Respuesta

11

Si hace referencia al archivo JS en una sección que es "runat = server", puede escribir src = "~/Javascript/jsfile.js" y siempre funcionará.

También puede hacer esto en su Load (En su masterpage):

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

intentar algo como esto en la página maestra:

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

Por alguna razón, me he encontrado el los navegadores son bastante quisquillosos con respecto a la etiqueta final, por lo que simplemente terminar la etiqueta con /> no parece funcionar.

0

@Jared: IE necesita eso/script. A FF no le importa.

4

La nueva versión de ASP.NET (3.5 SP1) tiene una característica ingeniosa llamada CompositeScript. Esto le permite usar un ScriptManager para hacer referencia a muchos pequeños archivos .js del lado del servidor y enviarlos como un único archivo .js al cliente.

Bueno para el cliente ya que solo tiene que descargar un archivo. Bien por ti, ya que puedes mantener los archivos como quieras del lado del servidor.

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

Es posible que desee echar un vistazo a FileResolver. Es un controlador HTTP que le permite hacer esto:

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

Y tienen la tilde (así como cualquier tildes dentro del archivo) ampliado correctamente.

Cuestiones relacionadas