Pregunta

Estoy tratando de acceder a un archivo .js en el directorio de puntos de vista. Tengo una aplicación MVC con /Views/Home/MyControl.ascx Tengo un archivo js /Views/Home/MyControl.js

Me gustaría hacer referencia al archivo .js y mantenerlo con el control. He probado las siguientes entradas en el enrutamiento, y ninguno parece funcionar.

        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("{file}.js");
        routes.IgnoreRoute("{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{controller}/{resource}.js/{*pathInfo}");
        routes.IgnoreRoute("{*alljs}", new { alljs = @".*\.js(/.*)?" });

Por favor, ayuda, por favor, no sugieren añadir el archivo .js en el directorio de secuencias de comandos. Me gustaría hacer que funcione de esta manera, o saber por qué no se puede hacer.

Me gustaría poner el script en la página, solamente la depuración de scripts se rompe en VS2010 B2.

Gracias Saludos Craig.

¿Fue útil?

Solución

La carpeta Views es, bueno para las vistas, y JavaScript debe ser puesto en otro lugar. Es por eso que los diseñadores del marco MVC pusieron una web.config en esta carpeta Views que niega el acceso a cualquier archivo dentro. Usted puede modificar este ajuste defaut pero se advirtió que esto podría ser un problema de seguridad potencial. Así que abre el archivo web.config ubicado en la carpeta y Views:

Reemplazar:

<httpHandlers>
  <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

por:

<httpHandlers>
  <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.master" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.ascx" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

Vaya a http://yoursite/Views/test.js

P.S. También podría eliminar todo el IgnoreRoutes se pone en global.asax.

Otros consejos

No sería esto una mejor solución mediante el DefaultHttpHandler por los recursos HTML y mantener el HttpNotFoundHandler para todos los demás tipos de archivo

<httpHandlers>  
  <add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers> 

En realidad para IIS modo integrado, es necesario utilizar System.Web.StaticHttpHandler:

<httpHandlers>
  <add path="*.css" verb="*" type="System.Web.StaticHttpHandler"/> 
  <add path="*.js" verb="*" type="System.Web.StaticHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers>

Al parecer, las obras System.Web.DefaultHttpHandler en el modo clásico de IIS solamente.

En MVC 4 que tenía que actualizar el controlador de sección, así como la sección httpHandlers.

He actualizado el web.config en la carpeta Vistas con lo siguiente.

<httpHandlers>
  <add path="*.aspx" verb="*" type="System.Web.HttpNotFoundHandler"/>
  <add path="*.cshtml" verb="*" type="System.Web.HttpNotFoundHandler"/>
</httpHandlers>

<handlers>
  <remove name="BlockViewHandler" />
  <add name="BlockViewHandlerRazor" path="*.cshtml" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
  <add name="BlockViewHandlerAspx" path="*.aspx" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top