2012-06-01 9 views
9

in MVC4 verwenden sie Bundles, um alle Skripte und CSS-Dateien einmal aufzurufen. Soweit ich weiß, ist die Reihenfolge der js und cs Dateien wichtig, wenn Sie sie anrufen. Wenn ich Bundles verwende, wie werde ich wissen, ob die CSS- und JS-Dateien in der richtigen Reihenfolge innerhalb des Bundles sind? und kann ich die Bestellung anpassen?mvc4 bündel, wie funktioniert es?

ich jetzt ein Problem mit meinem Datepicker habe, so scheint es, seine CSS-Datei/Thema nicht richtig so wollen wird geladen i zu überprüfen, wie die Pakete css/js Dateien ... danke :) bestellen

<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

Antwort

5

Eine späte Antwort auf diese Frage, aber ASP.NET MVC Befehle ersetzen Dateien alphabetisch sortiert. Sie können auch die Schnittstelle IBundleOrderer verwenden, um Ihre Skriptdateien manuell zu sortieren.

Zum Beispiel verwenden, um benutzerdefinierte IBundleOrderer Implementierung wie folgt aus:

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

MyBundleOrderer nimmt hohe Priorität Skripte von web.config-Datei:

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

Ich mag falsch interpretieren, aber für die Klarheit für andere SO-Benutzer scheint MVC Dateien alphabetisch bestellen, wenn mit einem Platzhalter mit "Include" hinzugefügt (oder ich nehme an, wenn Sie "IncludeDirectory" als verwenden auf die Frage des OP). Wenn Sie bestimmte Dateien explizit auflisten, werden diese in der angegebenen Reihenfolge hinzugefügt. Quelle "Das Hinzufügen von Skripts nach Platzhalter führt dazu, dass diese standardmäßig in alphabetischer Reihenfolge geladen werden. Das ist normalerweise nicht das, was Sie wollen ... das explizite Hinzufügen jeder Datei ist weniger fehleranfällig" - http://www.asp.net/mvc/tutorials/mvc- 4/Bündelung und Minification. – pwdst

+0

@pwdst: Ja, Sie haben Recht, MVC Bestellungen Dateien alphabetisch. Also ist dein Kommentar auch eine Option. Ich bereite mein Beispiel für die Fälle vor, in denen du deine Dateien nicht umbenennen willst. – Canavar

5

Sie können die Reihenfolge der Dateien "css" und "js" steuern, indem Sie Ihre eigenen Bundles erstellen, wie auf dieser thread gezeigt.

Eine wichtige Sache ist, dass Sie

BundleTable.Bundles.RegisterTemplateBundles(); 

mit

BundleTable.Bundles.EnableDefaultBundles(); 

in Global.asax.cs