Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在MVC脚本包中使用CDN。我错过了什么?_C#_Asp.net Mvc_Cdn - Fatal编程技术网

C# 在MVC脚本包中使用CDN。我错过了什么?

C# 在MVC脚本包中使用CDN。我错过了什么?,c#,asp.net-mvc,cdn,C#,Asp.net Mvc,Cdn,我正在尝试使用CDN加载jquery。我读过这篇文章,这似乎应该是非常简单的 我的脚本包定义如下 bundles.UseCdn = true; bundles.Add(new ScriptBundle("~/bundles/jquery", "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js").Include( "~/Scripts/jquery-{version}.js"));

我正在尝试使用CDN加载jquery。我读过这篇文章,这似乎应该是非常简单的

我的脚本包定义如下

bundles.UseCdn = true;
bundles.Add(new ScriptBundle("~/bundles/jquery", "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js").Include(
                        "~/Scripts/jquery-{version}.js"));
我将其包括在页面上,如下所示:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width" />
    <title>@ViewBag.Title</title>
    @Styles.Render("~/Content/css")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    @RenderBody()

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>

@视图包。标题
@style.Render(“~/Content/css”)
@Scripts.Render(“~/bundles/modernizer”)
@RenderBody()
@Scripts.Render(“~/bundles/jquery”)
@RenderSection(“脚本”,必需:false)
但当我看firebug时,似乎jquery是从localhost加载的。

我尝试过realease和debug构建。
我错过了什么?我认为这应该很简单。谢谢。

确保您未处于调试模式

  bundles.Add(new ScriptBundle("~/bundles/jquery", "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.7.1.min.js")

设置
BundleTable.EnableOptimizations=true//如果要使用调试模式

在发布模式下,将从CDN请求jQuery,并且 jQuery的调试版本将在调试模式下本地获取。什么时候 使用CDN时,您应该有一个后备机制,以防CDN 请求失败

如果CDN请求失败,则可以提供回调

<script type="text/javascript">
            if (typeof jQuery == 'undefined') {
                var e = document.createElement('script');
                e.src = '@Url.Content("~/Scripts/jquery-1.7.1.js")';
                e.type = 'text/javascript';
                document.getElementsByTagName("head")[0].appendChild(e);

            }
        </script> 

if(typeof jQuery==“未定义”){
var e=document.createElement('script');
e、 src='@Url.Content(“~/Scripts/jquery-1.7.1.js”);
e、 类型='text/javascript';
document.getElementsByTagName(“head”)[0].appendChild(e);
}

debug=“false”
模式下运行应用程序,或使用
BundleTable.EnableOptimizations=true

实际上,当使用最新版本的ASP.NET MVC时,您可以将@RaviGadag的方法写得更短。这样,您就不必自己在布局中编写回退:

public static void RegisterBundles(BundleCollection bundles)
{

  bundles.UseCdn = true;

  var jqueryCdnPath = "http://ajax.aspnetcdn.com/ajax/jQuery/jquery-2.1.3.min.js";
  var jqueryBundle = new ScriptBundle("~/bundles/jquery", jqueryCdnPath).Include("~/Scripts/jquery-{version}.min.js");
  jqueryBundle.CdnFallbackExpression = "window.jQuery";
  bundles.Add(jqueryBundle);

  // ...

  BundleTable.EnableOptimizations = true;
}
内容交付网络(CDN)中可用的jquery版本:

他们可能已否决投票,因为您的CDN回退将脚本引用放在头部,这通常是不明智的。您可以在BundleConfig类中指定一个CDN回退表达式,而不是编写JS代码,如下所示:jquery.CdnFallbackExpression=“window.jquery”;要使用调试模式,这不应该是
BundleTable.EnableOptimizations=false
吗?@MichaelTranchida我想Ravi Gadag的意思是
EnableOptimizations=true
允许您像在发布模式一样“调试”绑定和缩小fwiw:我不确定有多少人知道这个属性。。。在这个场景中,我使用if(Debugger.IsAttached)通过“debug”脚本加载,在“else”中,我手动触发BundleTable.EnableOptimizations=true,而不是依赖web.config。如果您在使用IIS与Asp.net开发主机的环境中工作,这意味着您需要调试脚本,最坏的情况下,您必须返回并记住运行IDE,然后刷新页面以获取纯文本详细脚本。希望这能帮上忙。对不起,忘了提了。这也确保了我在部署时永远不会忘记启用优化或以正确的方式编译等。这通常不是生产方面的问题,但可能是QA站点等方面的问题。在这些站点中,您希望确保您的测试团队使用缩小的版本来确保稳定性。
BundleTable.EnableOptimizations=true将在所有屏幕上对其进行缩小time@DaveJellison我的猜测是,大多数开发人员无法直接访问后台和生产环境中的服务器,尤其是在使用负载平衡时,因此附加调试器不是一个真正的选项。对,我的评论自然只适用于您的本地环境。这对OP的观点没有帮助,只是一个技巧,你可以在本地开发中使用它来测试小型化和“标准”CSS/JS,然后再发布一些不起作用的东西并浪费时间……特别是如果你想测试你的CDN,这通常可以从您的本地主机上实现……请查看这篇相关且非常有趣的文章,它应该是“window.jQuery”,而不是“window.jQuery”。JavaScript区分大小写。