4

我编写了一个新应用程序,它将使用现有的主题,设计师将对其进行更改。

所以我决定,而不是将脚本放在 Scripts 中,而将其他所有内容放在 Content(Css、图像)中,只将主题保留在 Theme 文件夹中(带有子目录 - js、css、img)

所以我尝试将脚本捆绑更改为指向我在 Theme/js 中的脚本而不是 Scripts

我把它改成

bundles.Add(
          new ScriptBundle("~/Scripts/vendor")
            .Include("~/Theme/js/jquery-{version}.js")
            .Include("~/Theme/js/knockout-{version}.debug.js")
            .Include("~/Theme/js/sammy-{version}.js")
            .Include("~/Theme/js/toastr.js")
            .Include("~/Theme/js/Q.js")
            .Include("~/Theme/js/breeze.debug.js")
            .Include("~/Theme/js/bootstrap.js")
            .Include("~/Theme/js/moment.js")
          );

我不明白的是线

new ScriptBundle("~/Scripts/vendor")

如果我将其保留为上述内容(即使没有 Scripts/vendor 文件夹,代码也可以正常工作,但是我将其更改为

new ScriptBundle("~/Theme/js/vendor")

我在萤火虫中遇到网络错误:

"NetworkError: 404 Not Found - http://localhost:51154/scripts/vendor"

其余脚本未加载。

那条线是做什么的?

谢谢

4

3 回答 3

5

The bundles.Add(ScriptBundle) method adds a script bundle to the bundles table, to which you can refer by the string provided to the ScriptBundle(string) constructor.

So a bundle created with new ScriptBundle("~/Foo") and added to bundles, can later be rendered using @Scripts.Render("~/Foo").

What you probably forgot is to change @Scripts.Render("~/Scripts/vendor") in your _layout.cshtml to @Scripts.Render("~/Theme/js/vendor"), and that will be the error you saw.

The parameter you pass to the constructor is merely documented as "a virtual path for the bundle", so you'll have to figure out what that means and what you can and cannot put there.

于 2013-04-24T15:40:46.617 回答
2

我有一个类似的问题,我通过确保我在 ScriptBundle(xx) 中使用的别名和我的实际文件系统之间没有重叠来修复它(在你的情况下 Theme/js 是包和你包含的脚本之间的相同路径。

ScriptBundle 类将所有包含的 js 文件打包成一个压缩包。这个单一的捆绑包被下载并且比几个独立的 GET 调用更有效。请注意,如果您正在调试解决方案并在 VS 中的调试器下运行站点,则不会提供捆绑包来帮助调试,而是将离散的 js 文件发送到客户端。捆绑仅在 时提供<system.web\><compilation debug="false" ...>

于 2013-04-24T15:46:35.707 回答
1

您正在创建一个ScriptBundle标识为字符串值“~/Scripts/vendor”并且可以使用此捆绑标识符呈现的。

当 you 时Include(...),此值表示您希望包含在该捆绑包中的资源的相对路径。

bundles.Add(
          new ScriptBundle("~/Scripts/vendor")
            .Include("~/Theme/js/jquery-{version}.js")
            .Include("~/Theme/js/knockout-{version}.debug.js")
            .Include("~/Theme/js/sammy-{version}.js")
            .Include("~/Theme/js/toastr.js")
            .Include("~/Theme/js/Q.js")
            .Include("~/Theme/js/breeze.debug.js")
            .Include("~/Theme/js/bootstrap.js")
            .Include("~/Theme/js/moment.js")
          );
于 2013-04-24T15:48:48.597 回答