2009-06-04 14 views
6

Creé un proyecto MVC ASP.net predeterminado. En la página Master Tengo el siguiente en la parte superiorCómo incluir archivos js en asp.net MVC y tener una ruta válida en todas las rutas

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 

entonces tengo que añadir un archivo javascript y añadido la línea de la siguiente arrastrando el archivo desde el explorador de soluciones a la página:

<head runat="server"> 
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title> 
    <link href="../../Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

Cuando tengo acceso a un sitio y miro el html desde el navegador que ver esto:

<head><title> 

    Index 

</title><link href="Content/Site.css" rel="stylesheet" type="text/css" /> 
    <script src="../../Scripts/jquery-1.3.2.min.js" type="text/javascript"></script> 
</head> 

el archivo CSS ruta relativa fue fijado pero el archivo JS no. El sitio se implementará en una carpeta diferente en el servidor que la raíz que obtengo en mi cuadro de desarrollo.

¿Hay una forma adecuada de hacerlo?

Respuesta

16

utilizar la dirección URL Ayudante:

<script type="text/javascript" src="<%=Url.Content("~/Content/script/MyFile.js")%>"></script> 

Espero que ayude

+0

Esto soluciona el problema con la instalación del sitio en un subdirectorio, ya que ~ se reemplaza con la ruta a la raíz del sitio. Pero el problema es que cuando llego a la raíz, el archivo js está en la carpeta de scripts debajo de la raíz y no permanece ../../Scripts. Como MVC enrutará a diferentes subcarpetas, la secuencia de comandos no siempre estará disponible en todas las rutas. Te di +1 porque al menos ahora tengo una forma de codificar las rutas relacionadas con la raíz. Pero esperaré para ver si alguien puede explicar por qué funciona para el CSS de fábrica y no para JS. – jvanderh

+0

Creo que el problema no es css vs Javascript, sino que simplemente tiene su css dentro de su carpeta conetne y no su script – Lewis

7

Puede crear un método de ayuda que hace algo como esto:

<%= Helper.IncludeJavascriptFile("Menu.js") %> 

y entonces en ese ayudante que hacer algo como:

public string IncludeJavascriptFile(string fileName){ 
    return Url.Content("<root>/Javascript/Files/" + fileName); 
} 

Luego puede llamar a ese método auxiliar desde su vista. Si decide cambiar la ubicación de los archivos, solo debe preocuparse por ello en una ubicación. Si cambia el nombre de los archivos, ese es un problema diferente en sí mismo.

+1

+1 para la capacidad de mantenimiento. – jvanderh

Cuestiones relacionadas