2009-11-19 44 views
5

我想要访问视图目录中的.js文件。 我有/Views/Home/MyControl.ascx MVC应用程序中我有一个js文件/Views/Home/MyControl.jsIgnoreRoute在ASP.MVC

我想引用.js文件,并与对照保持。 我已经尝试了路由中的以下条目,而且似乎没有任何工作。

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

请帮助,请不要建议将.js文件添加到scripts目录。 我想让它以这种方式工作,或知道为什么它不能完成。

我会把脚本放入页面,只有脚本调试在VS2010 B2中被破坏。

谢谢 Registers Craig。

回答

8

Views文件夹,以及意见,和JavaScript应放在别处。这就是为什么MVC框架的设计者在此Views文件夹中放置了一个web.config,该文件夹拒绝访问任何文件。你可以修改这个默认设置,但应该警告这可能是一个潜在的安全漏洞。于是打开web.config文件位于该文件夹Views和:

替换:

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

有:

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

导航到http://yoursite/Views/test.js

附:您也可以删除您在global.asax中输入的所有IgnoreRoutes。使用DefaultHttpHandler 对HTML资源和保持HttpNotFoundHandler为所有其他类型的文件

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

感谢您的帮助。 这听起来不对。 如果我把JavaScript与控制器放在一起,那会是一个更好的方法。我不是很想在通用脚本文件夹中找到它。我需要IgnoreRoute才能工作吗? – Craig 2009-11-20 04:22:57

+0

我知道这是一个旧的帖子,但圣洁的废话,这只是帮助我4小时后撕掉我的头发。我希望我能这样做20次! – rossipedia 2012-12-11 04:52:17

6

这是不是可以更好的解决方案,你需要使用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> 

显然System.Web.DefaultHttpHandler只适用于IIS经典模式。

1

其实对于IIS集成模式

0

在MVC 4中,我不得不更新处理程序部分以及httpHandlers部分。

我使用以下方法更新了Views文件夹中的web.config。

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