2012-02-21 7 views
6

Nos gustaría dividir el javascript de nuestras vistas Razor (para que podamos probar). ¿Podemos ubicar los archivos .js cerca de las vistas a las que se corresponden en lugar de en la carpeta Scripts? Por ejemplo, nos gustaría ver esto en explorador de soluciones:ASP.Net MVC3: Coloque archivos .js cerca de la vista en lugar de la carpeta de secuencias de comandos

MyMvcProject 
    - Views 
     - Home 
     - About.cshtml 
     - About.js 

Sin embargo, no sé que hace referencia al archivo .js desde el punto de vista .cshtml.

+1

posible duplicado de [Dónde colocar la vista específica javascr ¿archivos ipt en una aplicación ASP.NET MVC?] (http://stackoverflow.com/questions/604883/where-to-put-view-specific-javascript-files-in-an-asp-net-mvc-application) –

Respuesta

9

Por razones de seguridad, asp.net-mvc bloquea todo el acceso de archivos a la carpeta/Views desde las URL. Esto puede solucionarse, pero sugeriría NO hacer esto por razones de seguridad.

En general, debe dejar sus scripts en la carpeta Scripts, especialmente los que abarcan todo el sistema, como jquery y las cosas discretas. Esto es para que puedan actualizarse más fácilmente a través de NuGet a medida que se lanzan nuevas versiones o correcciones de errores.

No estoy seguro de por qué tiene un problema con las pruebas y las deja en la ubicación predeterminada.

+3

Al mantener el código estrechamente acoplado (como js específicos de la vista), significa que es menos probable que se pierda al modificar. Acordado, los archivos js comunes deben dejarse en Scripts. ¿Cuáles son las implicaciones de seguridad de servir archivos js desde la carpeta Ver? –

+0

@Brian: el motivo por el que se niega el acceso a la carpeta de vistas desde la URL se debe a que los archivos de vista pueden contener información confidencial. Permitir el acceso a la carpeta puede exponer información que no quiere que los atacantes conozcan. Una opción sería agregar un manejador de http que filtraría todos los archivos .js a través del manejador, permitiéndole servirlos a través del código y controlar el acceso. –

2

Si habla de romper scripts 'personalizados' fuera de su vista y colocarlos en una carpeta separada con el fin de probar su javascript, entonces sí, puede colocarlos en una carpeta de su elección.

Sin embargo, no recomendaría colocarlas lado a lado de su vista ... eso llevará a una estructura de proyecto complicada y lo hará mucho más difícil si alguna vez quiere minimizar su javascript.

Por lo general, dejo los archivos javascript "framework" dentro de la carpeta Scripts por las razones que Mystere Man mencionó en su respuesta; sin embargo, he puesto 'javascript' personalizado o visto archivos dentro de /Content/js/.

Para hacer referencia a ellas sólo tendría que añadir una referencia dentro de su vista o página maestra (diseño):

<script type="text/javascript" src="@Url.Content("~/Content/js/somelink.js")"></script> 
+0

Será más difícil de minimizar porque la mayoría de las herramientas de minimización se ven en la carpeta de secuencias de comandos? –

+0

@Brian: la mayoría de las herramientas de minimización esperan que los archivos .js estén en la misma ubicación, no necesariamente/Scripts –

2

Abiertas Vistas/Web.config y reemplazar este

<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 

con este

<add name="ExcludeRazorViews" path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler" /> 
Cuestiones relacionadas