2

我想使用ASP.NET MVC 4 捆绑和缩小功能,请假设我们运行调试模式,因此没有捆绑任何内容,但每个引用都简单地呈现给单个标签。本地一切正常:

例子

 public static void RegisterBundles(BundleCollection bundles)
 {
      bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                  "~/Scripts/jquery-{version}.js"));
 }

现在从视图调用@Scripts.Render("~/bundles/jquery")时,会生成一个类似的标签:

 <script src="/Scripts/jquery-1.8.2.js"></script>

如果我只写,结果是一样的:

 <script src="@Url.Content("~/Scripts/jquery-1.8.2.js")"></script>

但是当我将所有内容部署到 Internet 中的测试服务器时(仍然使用调试模式),启用了一些Url 重写,我将特定域或子域路由到特定文件夹。

例如,如果域sub1.example.com然后转发到example.com/__sub1__和在转发到的情况下sub2.example.com等等example.com/__sub2__。当我sub1.example.com在浏览器中打开时,通常没有任何线索表明会发生这种情况,Url 没有改变,所有 Url 仍然有效,使用该Url.Content(...)方法生成的引用也是如此。

但出于某种奇怪的原因,对@Scripts.Render("~/bundles/jquery")now 的调用呈现如下内容:

 <script src="/__sub1__/Scripts/jquery-1.8.2.js"></script>

请注意“/ sub1 ”部分,它是不应该生成的部分,并且永远不会出现在呈现的 html 代码中的某个位置,并且由于 url 重写转发失败而导致 404。

尽管...

<script src="@Url.Content("~/Scripts/jquery-1.8.2.js")"></script>

...仍然将正确的相对路径呈现到“/Scripts/jquery-1.8.2.js”。而且我从来没有遇到过像这样重写 URL 的其他问题。而且我不想摆脱这种重写。

显然,这同样适用于样式表。

有什么我可以尝试的想法吗?

4

1 回答 1

1

这是脚本/样式帮助器的当前实现的一个错误,这应该在不久(10 月初)可用的 1.1-alpha1 版本中修复,因为对使用在 ASP.NET 中注册的 VirtualPathProvider 的支持已经修复了这个一般问题问题类别(正确解析资源路径)。

于 2012-09-28T18:23:16.443 回答