5

我正在尝试访问视图目录中的 .js 文件。我有一个带有 /Views/Home/MyControl.ascx 的 MVC 应用程序我有一个 js 文件 /Views/Home/MyControl.js

我希望引用 .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 文件添加到脚本目录。我想让它以这种方式工作,或者知道为什么不能这样做。

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

谢谢问候克雷格。

4

4 回答 4

8

Views文件夹非常适合视图,并且 javascript 应该放在其他地方。这就是为什么 MVC 框架的设计者web.config在这个Views文件夹中放置一个拒绝访问其中的任何文件的原因。您可以修改此默认设置,但请注意这可能是一个潜在的安全漏洞。因此,打开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

PS您也可以删除所有IgnoreRoutes您放入的global.asax

于 2009-11-19T19:16:39.080 回答
6

将 DefaultHttpHandler 用于 html 资源并将 HttpNotFoundHandler 用于所有其他类型的文件,这不是更好的解决方案吗

<httpHandlers>  
  <add path="*.html" verb="*" type="System.Web.DefaultHttpHandler"/> 
  <add path="*.*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers> 
于 2010-07-20T15:45:30.583 回答
1

实际上对于 IIS 集成模式,您需要使用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 经典模式下工作。

于 2012-10-22T12:04:49.297 回答
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>
于 2013-10-19T04:08:19.197 回答