Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/321.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# 如何在MVC4中正确绑定样式和脚本?_C#_Asp.net Mvc 4_Bundle - Fatal编程技术网

C# 如何在MVC4中正确绑定样式和脚本?

C# 如何在MVC4中正确绑定样式和脚本?,c#,asp.net-mvc-4,bundle,C#,Asp.net Mvc 4,Bundle,虽然我很喜欢MVC,但我不理解捆绑。我阅读了一些关于捆绑的文档,但是直到现在我还没有找到一个关于如何将其用于我的脚本和样式的一般概念 经过数小时的反复试验,唯一的解决方案是: 为脚本x.js创建捆绑包,相对路径a/b/c为: var bundle = new ScriptBundle("~/a/b/c/bundle").Include("~/a/b/c/x.js"); bundles.Add(bundle); var bundle = new StyleBundle("~/a/b/c/bund

虽然我很喜欢MVC,但我不理解捆绑。我阅读了一些关于捆绑的文档,但是直到现在我还没有找到一个关于如何将其用于我的脚本和样式的一般概念

经过数小时的反复试验,唯一的解决方案是:

  • 为脚本x.js创建捆绑包,相对路径a/b/c为:

    var bundle = new ScriptBundle("~/a/b/c/bundle").Include("~/a/b/c/x.js");
    bundles.Add(bundle);
    
    var bundle = new StyleBundle("~/a/b/c/bundle").Include("~/a/b/c/x.css");
    bundles.Add(bundle);
    
  • 为样式x.css创建捆绑包,相对路径a/b/c为:

    var bundle = new ScriptBundle("~/a/b/c/bundle").Include("~/a/b/c/x.js");
    bundles.Add(bundle);
    
    var bundle = new StyleBundle("~/a/b/c/bundle").Include("~/a/b/c/x.css");
    bundles.Add(bundle);
    
  • 并在视图中引用它作为

    @Scripts.Render("~/a/b/c/bundle");
    @Styles.Render(("~/a/b/c/bundle");
    
    显然,缺点是对于每一条路径,我都需要一个单独的bundle,其中包含一个构造为“path”+后缀的键(我使用“bundle”,但其他所有东西都可以)

    我的路径如下:

    • 内容\

      • 历法\
      • 日期选择器\
      • JqGrid\
      • 模板\
        • 真棒\
    • 剧本

      • 领航员
      • jqGrid
      • jqPlot
    是否有任何聪明的方法/最佳实践来创建和使用捆绑包或组织脚本和样式的路径


    注释:当标题非常相似时,我不认为这个问题是重复的。

    捆绑和缩小通过减少对服务器的请求数量和减少请求资产(如CSS和JavaScript)的大小来改进加载时间。 您可以为所有CSS创建单个捆绑包,但将与供应商相关的内容和自定义内容分别分组,以提高可管理性。该捆绑包被视为单个CSS/Javascript文件,需要一个请求,尽管加载所需的时间会增加。要缩短加载时间,请考虑通过添加以下内容来缩小捆绑包内容

    BundleTable.EnableOptimizations = true;
    
    在您的bundle注册方法中

    public static void RegisterBundles(BundleCollection bundles)
    {
        bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                     "~/Scripts/jquery-{version}.js"));    
    
        BundleTable.EnableOptimizations = true;
    }
    
    使用CDN for Jquery和其他标准CSS/Javascripts是一种很好的方法,因为内容是从不同的服务器并行加载的


    您是在寻找更好的方式来捆绑定制css和脚本,还是所有脚本和css(包括供应商)?@jpgrassi我在寻找捆绑所有脚本和样式的方式。在我参与的项目中,我们将“供应商”脚本(引导、jquery、angular等)分开“进入bundles/js/vendors。我们的自定义脚本,我们放在另一个bundle中。@jpgrassi这很有意义。你能给我一个如何创建vendors bündle的示例吗(什么键以及结构如何)。我在一些博客中读到,捆绑是否工作以及如何工作也取决于供应商。抱歉,这并不能回答我的问题,也不正确:AFAIK BundleTable.EnableOptimizations仅强制在调试模式下进行捆绑,默认情况下在发布模式下启用。另请参阅