2009-11-19 9 views
5

Ich versuche, auf eine JS-Datei im Sichtenverzeichnis zuzugreifen. Ich habe eine MVC-Anwendung mit /Views/Home/MyControl.ascx Ich habe eine js Datei /Views/Home/MyControl.jsIgnoreRoute in ASP.MVC

mag ich die JS-Datei verweisen und es mit der Kontrolle zu halten. Ich habe die folgenden Einträge im Routing versucht, und keiner scheint zu funktionieren.

 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 nicht, fügen Sie die .js-Datei zum Skriptverzeichnis hinzu. Ich möchte es auf diese Weise arbeiten lassen oder wissen, warum es nicht möglich ist.

Ich würde das Skript in die Seite legen, nur Skript-Debugging ist in VS2010 B2 gebrochen.

Dank Grüße Craig.

Antwort

8

Der Ordner Views ist, gut für Ansichten, und Javascript sollte woanders hinlegen. Aus diesem Grund haben die Entwickler des MVC-Frameworks einen web.config Ordner in diesen Views Ordner gestellt, der den Zugriff auf alle darin enthaltenen Dateien verweigert. Sie könnten diese Einstellung ändern, aber seien Sie gewarnt, dass dies eine potenzielle Sicherheitslücke darstellen könnte. So öffnen Sie die web.config Datei befindet sich im Ordner Views und:

ersetzen:

<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 IgnoreRoutes entfernen, die Sie in global.asax eingegeben haben.

+0

Danke für die Hilfe. Das klingt falsch. Was, wenn ich das Javascript mit dem Controller einsetze, wäre das ein besserer Ansatz. Ich möchte es nicht wirklich im allgemeinen Skriptordner. Benötige ich die IgnoreRoute, damit das funktioniert? – Craig

+0

Ich weiß, dass dies ein alter Post ist, aber heiliger Mist, der mir nach mehr als vier Stunden, in denen ich mir die Haare ausgerissen habe, nur geholfen hat. Ich wünschte, ich könnte das 20 mal aufbessern! – rossipedia

6

Wäre das nicht eine bessere Lösung sein, die Defaulthttp mit für HTML-Ressourcen und halten die HttpNotFoundHandler für alle anderen Arten von Datei

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

Eigentlich für IIS integriert Modus müssen Sie System.Web.StaticHttpHandler verwenden:

Anscheinend System.Web.DefaultHttpHandler funktioniert nur im klassischen IIS-Modus.

0

In MVC 4 musste ich den Handler-Abschnitt sowie den httpHandlers-Abschnitt aktualisieren.

Ich aktualisierte die web.config im Ordner Ansichten mit den folgenden.

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