2012-06-01 17 views
9

mvc4では、バンドルを使用してすべてのスクリプトとcssファイルを一度呼び出します。私が知る限り、jsとcsファイルの注文は、あなたがそれらを呼び出すときに重要です。バンドルを使用している場合、バンドル内の正しい順序でcssファイルとjsファイルがあるかどうかを知る方法は?注文をカスタマイズすることはできますか?mvc4バンドル、どのように動作していますか?

私は今、私のDatePickerのに問題が生じています、私がバンドルは、CSS/JSファイルを注文する方法を確認したいのCSSファイル/テーマはそう正しくロードされていないようです...

<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> 
+0

http://stackoverflow.com/questions/9522407/ asp-net-optimization-bundling – VJAI

答えて

5

BundleTable.Bundles.EnableDefaultBundles(); 

後半その質問への答えが、ASP.NET MVCのご注文で

BundleTable.Bundles.RegisterTemplateBundles(); 

を交換する必要がありますファイルをアルファベット順に表示します。 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; 
    } 
} 
+0

私は解釈が間違っているかもしれませんが、他のSOユーザーの明快さのために、MVCは "Include"でワイルドカードを使って追加した場合、MVCはファイルをアルファベット順に並べます(または "IncludeDirectory" OPの質問ごとに)。特定のファイルを明示的にリストすると、指定された順に追加されます。ソース "ワイルドカードのデフォルトでスクリプトを追加することはアルファベット順にロードすることになります。これは典型的にはあなたが望むものではありません。明示的に各ファイルを追加するのはエラーが起こりにくいからです。" - http://www.asp.net/mvc/tutorials/mvc- 4 /結束および縮小。 – pwdst

+0

@pwdst:そうです、MVCはファイルをアルファベット順に並べます。だからあなたのコメントもオプションです。私はあなたのファイルの名前を変更したくない場合のための私の例を準備します。 – Canavar

5
:)感謝

この「thread」に示すように、独自のバンドルを作成することで、 "css"と "js"ファイルの順序を制御できます。

一つ重要なことは、あなたがGlobal.asax.cs

関連する問題