2012-06-01 35 views
9

en mvc4 usan paquetes para llamar a todos los scripts y archivos css una vez. por lo que sé, el orden de los archivos js y cs es importante cuando los llamas. Si utilizo paquetes, ¿cómo voy a saber si los archivos css y js están en el orden correcto dentro del paquete? y puedo personalizar el pedido?paquete mvc4, ¿cómo está funcionando?

estoy teniendo un problema con mi selector de fecha Ahora, parece que su archivo css/tema no se carga correctamente, así que quiero comprobar cómo haces ordenar los archivos css/js ... gracias :)

<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

Respuesta

5

Una respuesta tardía a esa pregunta, pero las órdenes ASP.NET MVC archivos por orden alfabético También puede usar la interfaz IBundleOrderer para ordenar manualmente los archivos de script.

Por ejemplo, el uso de encargo aplicación IBundleOrderer así:

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

MyBundleOrderer toma guiones de alta prioridad del archivo 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

Me puedo equivocar en la interpretación, pero para mayor claridad para otros usuarios de SO, parece que MVC ordenará los archivos alfabéticamente si se agregan usando un comodín con "Incluir" (o supongo que si usa "IncludeDirectory" como según la pregunta del OP). Si hace una lista explícita de archivos específicos, estos se agregan en el orden dado. Fuente "Agregar guiones por comodín está predeterminado para cargarlos en orden alfabético, que normalmente no es lo que quieres ... agregar explícitamente cada archivo es menos propenso a errores" - http://www.asp.net/mvc/tutorials/mvc- 4/empaquetado y minificación. – pwdst

+0

@pwdst: Sí, tienes razón, MVC ordena los archivos alfabéticamente. Entonces tu comentario es una opción también. Preparo mi ejemplo para los casos en los que no quiere cambiar el nombre de sus archivos. – Canavar

5

Puede controlar el orden de los archivos "css" y "js" creando sus propios paquetes como se muestra en este thread.

Una cosa importante es que hay que sustituir

BundleTable.Bundles.RegisterTemplateBundles(); 

con

BundleTable.Bundles.EnableDefaultBundles(); 

en Global.asax.cs

Cuestiones relacionadas