2012-06-01 14 views
9

w mvc4 używają pakietów do wywoływania wszystkich skryptów i plików css tylko raz. o ile wiem, porządkowanie plików js i cs jest ważne, gdy je wywołujesz. jeśli używam pakietów, jak mam się dowiedzieć, czy pliki css i js są we właściwej kolejności wewnątrz pakietu? i czy mogę dostosować zamówienie?Pakiet mvc4, jak to działa?

Mam problem z moim datepicker teraz wydaje swój plik css/motyw nie ładuje się prawidłowo, więc chcę, aby sprawdzić, jak wiązki zamówić css/js pliki ... dzięki :)

<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-optimisation-bundling – VJAI

Odpowiedz

5

późną odpowiedź na to pytanie, ale rozkazy ASP.NET MVC pliki alfabetycznie. Możesz także użyć interfejsu IBundleOrderer, aby ręcznie zamówić pliki skryptów.

na przykład użyć niestandardowego realizacja IBundleOrderer tak:

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

MyBundleOrderer wykonuje skrypty wysokim priorytecie z pliku 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

Mogę być w błędzie przy interpretacji, ale dla jasności dla innych użytkowników SO, wygląda na to, że MVC będzie sortować pliki alfabetycznie, jeśli dodane za pomocą symbolu wieloznacznego z "Uwzględnij" (lub zakładam, że jeśli użyjesz "IncludeDirectory" jako według pytania OP). Jeśli jawnie wyświetlisz listę konkretnych plików, zostaną one dodane w podanej kolejności. Źródło "Dodawanie skryptów według symboli domyślnych do ładowania ich w kolejności alfabetycznej, co zwykle nie jest tym, czego potrzebujesz ... jednoznaczne dodanie każdego pliku jest mniej podatne na błędy" - http://www.asp.net/mvc/tutorials/mvc- 4/sprzedaż wiązana i zaminowanie. – pwdst

+0

@pwdst: Tak, masz rację, MVC porządkuje pliki alfabetycznie. Więc twój komentarz jest również opcją. Przygotowuję mój przykład do przypadków, w których nie chcesz zmieniać nazw plików. – Canavar

5

Możesz kontrolować kolejność plików "css" i "js", tworząc własne pakiety, jak pokazano na tym thread.

Jedną ważną rzeczą jest trzeba zastąpić

BundleTable.Bundles.RegisterTemplateBundles(); 

z

BundleTable.Bundles.EnableDefaultBundles(); 

w Global.asax.cs