2012-06-01 9 views
9

in mvc4 utilizzano i bundle per chiamare tutti gli script e i file css una volta. per quanto ne so, l'ordine dei file js e cs è importante quando li chiami. se uso bundle, come faccio a sapere se i file css e js sono nell'ordine corretto all'interno del bundle? e posso personalizzare l'ordine?mvc4 bundle, come funziona?

Sto avendo un problema con il mio datepicker ora, sembra il suo file css/tema non viene caricato correttamente in modo che voglio verificare come fasci di ordinare i file css/js ... grazie :)

<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

risposta

5

Una risposta a questa domanda in ritardo, ma gli ordini ASP.NET MVC file in ordine alfabetico. Inoltre è possibile utilizzare l'interfaccia IBundleOrderer per ordinare manualmente i file di script.

Ad esempio, utilizzare personalizzato implementazione IBundleOrderer così:

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

MyBundleOrderer prende script ad alta priorità di file 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

Potrei avere torto nell'interpretazione, ma per chiarezza per altri utenti SO, MVC ordinerà i file alfabeticamente se aggiunto utilizzando un carattere jolly con "Includi" (o presumo se si utilizza "IncludeDirectory" come per la domanda dell'OP). Se si elencano esplicitamente file specifici, questi vengono aggiunti nell'ordine indicato. Sorgente "Aggiunta di script in base ai valori predefiniti dei caratteri jolly per caricarli in ordine alfabetico, che in genere non è ciò che si desidera ... l'aggiunta esplicita di ciascun file è meno soggetta a errori" - http://www.asp.net/mvc/tutorials/mvc- 4/bundling-e-minification. – pwdst

+0

@pwdst: Sì hai ragione, MVC ordina i file in ordine alfabetico. Quindi anche il tuo commento è un'opzione. Preparo il mio esempio per i casi in cui non desideri rinominare i tuoi file. – Canavar

5

È possibile controllare l'ordine dei file "css" e "js" creando i propri bundle come mostrato in questo thread.

Una cosa importante è che devi sostituire

BundleTable.Bundles.RegisterTemplateBundles(); 

con

BundleTable.Bundles.EnableDefaultBundles(); 

in Global.asax.cs