2009-01-12 23 views
21

Mis caminos javascript trabajan en esta página: http://localhost:53049/CSS y Javascript ruta relativa confusión en ASP.NET MVC

Pero no en esta página: http://localhost:53049/Home/Messages

La razón es que las rutas relativas son diferentes, el primero requiere ("js/...") y el segundo requiere ("../../ js/...").

estoy incluyendo mi Javascript en mi archivo Site.Master:

<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> 

¿Cómo consigo alrededor de esta locura ruta relativa, es decir, cuál es la mejor manera práctica en ASP.NET MVC para establecer CSS/Las rutas de JavaScript en Site.Master para que funcionen para cada vista, sin importar cuán profunda sea la URL de esa vista.

Adición:

Parece que para el Índice de vista, cualquier camino va a funcionar, extrañamente:

<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> 

sino para cualquier otras páginas (páginas con una URL más profundo), ninguno de estos trabajo.

¿Qué está pasando aquí? ¿Cómo podemos establecer la ruta de JavaScript una vez en Site.Master y funcionan para todas las páginas?

Addenum II:

Resultó ser sólo un problema con el archivo javascript jqGrid (no el archivo de jQuery), al parecer dentro de ese archivo que hace referencia a otros archivos javascript y se confunde:

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

que no podemos ver las cosas publicadas desde su máquina localhost. – jacobangel

+0

tres LOL - ni siquiera había notado – annakata

+3

Sé (espero) que no puede verlos en mi máquina local, simplemente no sé cómo hacer que los http no se vinculen con este editor. El punto es que las rutas no funcionan si hay directorios en la URL. –

Respuesta

15

También puede usar la llamada al método Url.Content para asegurarse de que las rutas estén configuradas correctamente.

Se pueden encontrar ejemplos here.

3

Intente configurar el javascript para usar una barra diagonal al principio, como "/js/jquery.jqGrid.js" Esto les configurará para usar el dominio raíz en lugar de la ruta relativa.

+3

Por supuesto, esto solo funcionará si los archivos realmente viven en una ubicación fuera de la raíz del sitio. Por ejemplo, si se desarrolla en un directorio virtual pero se implementa en la raíz, este método fallará durante el desarrollo. –

13

caminos utilizados en cuanto a documentos CSS:

/Content/site.css

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

Las rutas relativas en documentos CSS están relacionados con el documento CSS, no se visualiza el documento.

Esta información me salvó algunos dolores de cabeza.

1

La solución para jqGrid: abrir los jquery.jqGrid.js archivo y busque la línea:

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

Como dice el comentario, tiene que editar ese camino, por ejemplo, para un típico ASP.NET MVC aplicación,

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

cuando se ejecuta localmente en un directorio virtual/aplicación, la URL será/MyApp/Scripts/js /. alguna sugerencia sobre qué hacer entonces? Odiaría convertir el archivo js en una vista solo para poder usar URL.Contenido, y no estoy demasiado loco por depender de los cambios en lmhosts, etc. ¿alguna alternativa? –

+0

Respuesta corta: Cambié a usar slickgrid, que no tiene este problema. –

1

es necesario agregar runat="server" y especificar la ruta absoluta de esta manera:

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