Asp.net-Mvc

mvc4 捆綁包,它是如何工作的?

  • December 25, 2012

在 mvc4 中,他們使用包來呼叫所有腳本和 css 文件一次。據我所知,呼叫 js 和 cs 文件的順序很重要。如果我使用捆綁包,我如何知道捆綁包中的 css 和 js 文件的順序是否正確?我可以自定義訂購嗎?

我現在的日期選擇器有問題,它的 css 文件/主題似乎沒有正確載入,所以我想檢查捆綁包如何訂購 css/js 文件…謝謝:)

<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Content/css")" rel="stylesheet" type="text/css" />
<link href="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Content/themes/base/css")" rel="stylesheet" type="text/css" />
<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")"></script>

該問題的答案較晚,但 ASP.NET MVC 按字母順序對文件進行排序。您還可以使用IBundleOrderer介面手動訂購腳本文件。

例如,使用這樣的自定義 IBundleOrderer 實現:

Bundle myBundle = new Bundle("~/bundles/SiteScripts", new JsMinify());
myBundle.IncludeDirectory("~/Scripts/SiteScripts", "*.js");
myBundle.Orderer = new MyBundleOrderer();
bundles.Add(myBundle);

MyBundleOrderer 從 web.config 文件中獲取高優先級腳本:

public class MyBundleOrderer : IBundleOrderer
{
   public IEnumerable<System.IO.FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
   {
       if (ConfigurationManager.AppSettings["HighPriorityScripts"] != null)
       {
           string[] highPriorityScripts = ConfigurationManager.AppSettings["HighPriorityScripts"].Split(',');
           List<FileInfo> listFiles = new List<FileInfo>(files);
           List<FileInfo> orderedFiles = new List<FileInfo>();

           // Add high priority files in order : 
           foreach (string highPriorityFile in highPriorityScripts)
           {
               FileInfo nextFileInfo = listFiles.Find(delegate(FileInfo arg) 
                               {
                                   return arg.Name == highPriorityFile;
                               }
                             );
               if (nextFileInfo != null)
               {
                   orderedFiles.Add(nextFileInfo);
               }
           }

           // Add remaining files to bundle : 
           foreach (FileInfo lowPriorityFile in listFiles)
           {
               if (!orderedFiles.Contains(lowPriorityFile))
               {
                   orderedFiles.Add(lowPriorityFile);
               }
           }

           return orderedFiles;
       }
       return files;
   }
}

引用自:https://stackoverflow.com/questions/10844289