如何在ASP.NET MVC 2 Views文件夹中引用javascript文件?

时间:2011-05-02 12:45:04

标签: asp.net-mvc-2 asp.net-mvc-routing

我正在尝试容纳一个公司标准,其中所有页面级javascript都包含在外部文件中,而不包含在ASPX或ASCX文件中。使用ASP.NET MVC 2,我想知道如何引用相对于视图的脚本文件(.js)。

换句话说,我不想使用应用程序中存在的所有小.js文件来对我的Scripts文件夹进行轮询。从组织的角度来看,将.js文件与.aspx / .ascx文件放在一起是最有意义的。例如,如果我有一个名为“MyController”的控制器,其动作名为“MyAction”,我会在Views / MyController文件夹中找到一个MyAction.aspx文件,并希望将名为“MyAction.js”的脚本文件放在同一文件夹。但是,我不能使用:

<script src="MyAction.js" type="text/javascript"></script>

似乎这也不起作用:

<script src="<%= Url.Content("~/Views/MyController/MyAction.js") %>"
        type="text/javascript"></script>

所以我猜这个问题可能与路由表有关,但我还是MVC的新手,所以我不确定。

第二个问题,是否可以像使用传统ASP.NET一样将javascript作为资源嵌入,并在客户端页面中生成非人类可读的URL?

更新

我只能假设这个问题变得陈旧,这就是没有其他人提供任何答案的原因。我无法相信这是一个难题。所以,我想我会添加这个小小的更新,看看我是否可以恢复对话。

2 个答案:

答案 0 :(得分:1)

你是对的,因为MVC路由。请记住,如果您公开Views文件夹以包含JavaScript文件,它还会公开您的视图(尽管不应该包含一些前端逻辑)。

我个人会使用脚本文件夹并在那里创建子文件夹。

修改 可能希望在这里查看:ASP.NET MVC routing and static data (ie. images, scripts, etc)了解ASP.NET MVC如何直接访问文件,在这里:http://haacked.com/archive/2008/02/12/asp.net-mvc-blocking-direct-access-to-views.aspx说明为什么Views文件夹中的脚本可能无法直接访问。

如果您在Views文件夹中有一个web.config,并且按照第二个链接中描述的方式进行配置,那么对Views文件夹的所有外部请求都将返回404.

<强> EDIT2: 您应该只能通过添加:

来允许访问JavaScript
<httpHandlers>
    <add path="*.js" verb="*" type="System.Web.StaticFileHandler"/>
    <add path="*" verb="*" type="System.Web.HttpNotFoundHandler" />
</httpHandlers>

到Views文件夹中的web.config。正如您所看到的,我不确定允许直接访问的处理程序的类型。继续添加它而不使用处理程序类型,当您尝试访问.js文件时,您会看到它被调用

答案 1 :(得分:0)

我也更喜欢保留仅与Views文件夹中的特定视图相关的脚本,以便这些脚本不会污染我为全局访问的脚本保留的Scripts。我找到的这个问题的最短解决方案如下:

更改httpHandlers中的web.config

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

到此:

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

多数民众赞成。现在,您可以将Javascripts放在视图文件夹中,并将它们链接起来:

<script type="text/javascript" src="~/Views/<ControllerName>/script.js"></script>

感谢Vadym Nikolaiev针对此解决方案发布了here