Domanda

Sto cercando di accedere a un file .js nella directory vista. Ho un'applicazione MVC con /Views/Home/MyControl.ascx Ho un file js /Views/Home/MyControl.js

Vorrei fare riferimento al file .js e tenerlo con il controllo. Ho provato le seguenti voci nel routing, e nessuno sembra funzionare.

        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(/.*)?" });

Si prega di aiuto, si prega di non suggerire di aggiungere il file .js nella directory degli script. Vorrei farlo funzionare in questo modo, o sapere il motivo per cui non si può fare.

vorrei mettere lo script nella pagina, solo il debug di script è suddiviso in VS2010 B2.

Grazie Saluti Craig.

È stato utile?

Soluzione

La cartella Views è, bene per le viste, e javascript dovrebbe essere messo altrove. Ecco perché i progettisti del framework MVC messo un web.config in questa cartella Views che nega l'accesso a qualsiasi file all'interno. Si potrebbe modificare questa impostazione il default ma sappiate che questo potrebbe essere un potenziale buco di sicurezza. Quindi aprire il file web.config si trova nella cartella Views e:

Sostituire:

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

con:

<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>

Accedere alla http://yoursite/Views/test.js

P.S. Si potrebbe anche rimuovere tutti i IgnoreRoutes si mette in global.asax.

Altri suggerimenti

Non sarebbe una soluzione migliore con il DefaultHttpHandler per le risorse html e mantenere il HttpNotFoundHandler per tutti gli altri tipi di file

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

In realtà per la modalità integrata di IIS, è necessario utilizzare 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>

A quanto pare opere System.Web.DefaultHttpHandler in modalità classica IIS solo.

In MVC 4 ho dovuto aggiornare la sezione del gestore, nonché la sezione httpHandlers.

Ho aggiornato il web.config nella cartella Visualizzazioni con il seguente.

<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>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top