¿Cuál es el mejor lugar (qué carpeta, etc.) para colocar archivos javascript específicos de vista en una aplicación ASP.NET MVC?
Para mantener mi proyecto organizado, realmente me encantaría poder ponerlos uno al lado del otro con los archivos .aspx de la vista, pero no he encontrado una buena manera de hacer referencia a ellos al hacerlo sin exponer las vistas ~ / / Acción / estructura de carpetas. ¿Es realmente malo dejar que se filtren los detalles de esa estructura de carpetas?
La alternativa es ponerlos en las carpetas ~ / Scripts o ~ / Content, pero es una pequeña irritación porque ahora tengo que preocuparme por los conflictos de nombres de archivos. Sin embargo, es una irritación que puedo superar si es "lo correcto".
asp.net-mvc
Erv Walter
fuente
fuente
Respuestas:
Pregunta antigua, pero quería dar mi respuesta en caso de que alguien más venga a buscarla.
Yo también quería mis archivos js / css específicos de vista en la carpeta de vistas, y así es como lo hice:
En la carpeta web.config en la raíz de / Views, necesita modificar dos secciones para permitir que el servidor web sirva los archivos:
Luego, desde su archivo de vista, puede hacer referencia a las URL como espera:
Esto permitirá el servicio de archivos .js y .css, y prohibirá el servicio de cualquier otra cosa.
fuente
Una forma de lograrlo es proporcionar la suya propia
ActionInvoker
. Usando el código incluido a continuación, puede agregar al constructor de su controlador:Ahora, siempre que coloque un
.js
archivo junto a su vista:Puedes acceder a él directamente:
A continuación se muestra la fuente:
fuente
Puede invertir la sugerencia de davesw y bloquear solo .cshtml
fuente
Site.Master
. La lista blanca parece el enfoque más seguroSé que este es un tema bastante antiguo, pero tengo algunas cosas que me gustaría agregar. Intenté la respuesta de davesw pero arrojaba un error 500 al intentar cargar los archivos de script, así que tuve que agregar esto al web.config:
a system.webServer. Esto es lo que tengo, y pude hacerlo funcionar:
Aquí hay más información sobre la validación: https://www.iis.net/configreference/system.webserver/validation
fuente
agregue este código en el archivo web.config dentro de la etiqueta system.web
fuente
También quería colocar archivos js relacionados con una vista en la misma carpeta que la vista.
No pude hacer que las otras soluciones en este hilo funcionen, no es que estén rotas, pero soy demasiado nuevo en MVC para que funcionen.
Usando la información proporcionada aquí y varias otras pilas, se me ocurrió una solución que:
Nota: también estoy usando el enrutamiento de atributos HTTP. Es posible que la ruta que se usa en mi alma pueda modificarse para que funcione sin habilitar esto.
Dado el siguiente ejemplo de estructura de directorio / archivo:
Usando los pasos de configuración que se indican a continuación, combinados con la estructura de ejemplo anterior, se accedería a la URL de la vista de prueba a través de:
/Example/Test
y se haría referencia al archivo javascript a través de:/Example/Scripts/test.js
Paso 1: habilitar el enrutamiento de atributos:
Edite su archivo /App_start/RouteConfig.vb y agréguelo
routes.MapMvcAttributeRoutes()
justo encima de las rutas existentes.Paso 2: configure su sitio para tratar y procesar /{controller}/Scripts/*.js como una ruta MVC y no como un recurso estático
Edite su archivo /Web.config, agregando lo siguiente a la sección system.webServer -> handlers del archivo:
Aquí está de nuevo con contexto:
Paso 3: agregue el siguiente resultado de la acción de scripts a su archivo de controlador
Deberá copiar esto en cada uno de sus archivos de Controller. Si lo desea, probablemente haya una manera de hacer esto como una configuración de ruta única y única de alguna manera.
Para el contexto, este es mi archivo ExampleController.vb:
Notas finales No hay nada especial sobre los archivos javascript test.vbhtml view / test.js y no se muestran aquí.
Guardo mi CSS en el archivo de vista, pero podría agregarlo fácilmente a esta solución para que pueda hacer referencia a sus archivos CSS de una manera similar.
fuente