【问题标题】:ASP.NET MVC - Where do you put your .js files if you dont want to store them in /Scripts?ASP.NET MVC - 如果您不想将 .js 文件存储在 /Scripts 中,您将它们放在哪里?
【发布时间】:2011-02-21 08:44:47
【问题描述】:

我有许多 .js 文件,我希望将它们存储在与它们的视图相同的目录中(它们特定于视图 - 只是为了将 javascript 与视图的 HTML 分开)

但是,将它们添加到 /Views/ControllerName/ 目录将不起作用,因为当向网络服务器发出请求以获取 .js 文件时:

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

它本质上是针对显然不存在的“视图”控制器。

更新

根据我的阅读,在 global.asax.cs RegisterRoutes 方法中添加以下 IgnoreRoute 应该允许访问任何请求的 .js 文件:

routes.IgnoreRoute("{resource}.js/{*pathInfo}");

但是,我似乎无法让它工作?

【问题讨论】:

标签: javascript asp.net-mvc resources controller routes


【解决方案1】:

已解决

在找到并测试了一些我无法工作的帖子(最确定的帖子here)之后,以下解决了这个难题:

Global.asax中,将以下代码添加到RegisterRoutes方法中:

routes.IgnoreRoute("{file}.js");

这里有一篇很棒的帖子描述了这个和其他活动here

【讨论】:

    【解决方案2】:

    我认为你有两个选择。

    1. 在脚本下重新创建 Views 文件夹结构,并将它们存储在脚本目录中的相同相对位置。
    2. 不要将它们保存在单独的文件中,而是在 MasterPage 中为脚本部分使用单独的 ContentPlaceHolders(通常位于正文的底部)。

    您也可以将它们存储在任何非“特殊”文件夹中,但如果您将它们分开,我认为脚本是正确的地方。

    我通常将常用脚本(由多个页面使用)保存在脚本文件夹中,没有相应的视图层次结构,并将特定于页面的脚本保存在视图文件中,但保存在单独的 ContentPlaceHolder 中。对我来说重要的是不要将 JS 保存在单独的文件中,而是 与内容分开。使用不同的 ContentPlaceHolder 可以做到这一点。

    【讨论】:

    • 我想将javascript保存在文件中的原因是浏览器会缓存它。内联 javascript 不能被缓存。如果我错了,请纠正我!谢谢
    • @Jimbo - 你真的有足够的特定于页面的 javascript 来担心浏览器缓存它吗?另外,不要忘记您将为每个 javascript 文件生成一个额外的同步请求。以我的经验,我没有超过几百个字节,当然每页不超过 1K 字节的 javascript。启用输出压缩后,不必为维护单独的文件而烦恼。
    • 确实 - 这些页面的脚本高达 20kb,用户将使用的连接运行速度约为 1.5 kb/s :( 你知道如何添加路由处理程序以忽略 .js 文件请求?
    【解决方案3】:

    想想你的最后一句话——这可能就是为什么要为这些设置一个特定的目录 (/Scripts/) 的原因吗? ;)

    【讨论】:

      猜你喜欢
      • 2010-11-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 2010-10-06
      • 1970-01-01
      • 1970-01-01
      • 2012-04-26
      相关资源
      最近更新 更多