2010-05-19 19 views
5

Tengo una serie de archivos .js que me gustaría almacenar en los mismos directorios que sus vistas (son específicos de una vista, es simplemente mantener el javascript separado del HTML de la vista)ASP.NET MVC: ¿dónde colocas los archivos .js si no quieres guardarlos en/Scripts?

Sin embargo , agregarlos a la costumbre trabajo /Views/ControllerName/ directorio porque cuando se hace una petición al servidor web para el archivo .js:

<script type="text/javascript" src="/Views/ControllerName/myscript.js"></script> 

en esencia, sería dirigido en el controlador 'Vistas' que obviamente no lo existe.

actualización

De lo que he leído, añadiendo lo siguiente en el método IgnoreRoute Global.asax.cs RegisterRoutes debe permitir el acceso a cualquier solicitó Js archivo:

routes.IgnoreRoute("{resource}.js/{*pathInfo}"); 

Sin embargo, Parece que no puede hacer que funcione?

+0

Tu respuesta no funcionó para mí. Esto me ayudó: http://stackoverflow.com/questions/9626611/placing-js-files-in-the-views-folder –

Respuesta

3

RESUELTO

Después de haber encontrado y probado un número de puestos (post más concluyente here) que no pude llegar al trabajo, la siguiente resuelve el rompecabezas:

En el Global.asax, añada lo siguiente código al método RegisterRoutes:

routes.IgnoreRoute("{file}.js"); 

Hay un gran post aquí que describe esta actividad adicional y here

-1

Contemple esa última frase suya: ¿podría ser por eso que se haya reservado un directorio específico (/ Scripts /) para estos? ;)

0

Tiene dos opciones, creo.

  1. Vuelva a crear la estructura de la carpeta Vistas en los scripts y guárdelos en la misma ubicación relativa en el directorio de scripts.
  2. No los guarde en archivos separados, pero use ContentPlaceHolders por separado en la página maestra para obtener una sección de script (normalmente en la parte inferior del cuerpo).

También podría almacenarlos en cualquiera de las carpetas no "especiales", pero creo que los scripts son el lugar correcto si los mantiene separados.

Normalmente guardo scripts comunes (utilizados por más de una página) en la carpeta de scripts, sin una jerarquía de vistas correspondiente y scripts específicos de la página en el archivo de vista, pero en ContentPlaceHolder por separado. Para mí, lo importante no es mantener el JS en un archivo separado, sino , separado del contenido. El uso de un ContentPlaceHolder diferente lo logra.

+0

La razón por la que deseo mantener el javascript en un archivo es porque el navegador lo almacenará en caché. JavaScript en línea no se puede almacenar en caché. ¡Por favor corrígeme si estoy equivocado! Gracias – Jimbo

+0

@Jimbo - ¿realmente tiene suficiente javascript específico para la página para preocuparse por el caché del navegador?Además, no olvide que generará una solicitud síncrona adicional para cada archivo javascript. En mi experiencia, no tengo más de unos cientos de bytes, ciertamente no más de 1K bytes de JavaScript por página. Con la compresión de salida habilitada, no vale la molestia de mantener archivos separados. – tvanfosson

+0

De hecho, los scripts para estas páginas son de hasta 20 kb y las conexiones que los usuarios ejecutarán son de aproximadamente 1.5 kb/s :( ¿Sabes cómo agregar un manejador de ruta para ignorar las solicitudes de archivo .js? – Jimbo

Cuestiones relacionadas