Frage

Ich versuche, eine Js-Datei im Verzeichnis Ansichten zuzugreifen. Ich habe eine MVC-Anwendung mit /Views/Home/MyControl.ascx Ich habe eine JS-Datei /Views/Home/MyControl.js

Ich möchte die JS-Datei verweisen, und halten Sie es mit der Kontrolle. Ich habe folgende Einträge in der Routing versucht, und keiner scheint zu arbeiten.

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

Bitte helfen Sie schlagen nicht die Js-Datei in das Verzeichnis scripts hinzuzufügen. Ich möchte es so funktioniert, oder wissen, warum es nicht getan werden kann.

Ich würde das Skript in die Seite setzen, nur Skriptdebuggen in VS2010 B2 unterbrochen wird.

Danke Grüße Craig.

War es hilfreich?

Lösung

Der Views Ordner ist, gut für Ansichten und Javascript sollte an anderer Stelle gesetzt werden. Deshalb haben die Designer des MVC-Framework ein web.config in diesem Views Ordner abgelegt, die den Zugriff auf alle Dateien innerhalb verweigert. Sie können diese Einstellung ändern defaut aber darauf hingewiesen werden, dass dies ein potenzielles Sicherheitsloch sein könnte. So öffnen Sie die web.config Datei im Views Ordner und:

Ersetzen Sie:

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

mit:

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

Navigieren Sie zu http://yoursite/Views/test.js

P. S. Sie können auch alle die IgnoreRoutes Sie in global.asax setzen entfernen.

Andere Tipps

Wäre dies nicht eine bessere Lösung, um die Defaulthttp mit für HTML-Ressourcen und die HttpNotFoundHandler für alle anderen Dateitypen zu halten

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

Eigentlich für IIS integriert Modus, müssen Sie Verwendung 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>

Offenbar System.Web.DefaultHttpHandler Werke in IIS klassischen Modus.

In MVC 4 hatte ich den Handler Abschnitt sowie der Httphandlers Abschnitt zu aktualisieren.

ich die web.config in den Ansichten Ordner mit dem folgenden aktualisiert.

<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>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top