2012-06-01 2 views
9

В mvc4 они используют пакеты для вызова всех скриптов и файлов css один раз. насколько я знаю, упорядочение файлов js и cs важно, когда вы их вызываете. если я использую пакеты, как мне узнать, находятся ли файлы css и js в правильном порядке внутри пакета? и могу ли я настроить заказ?пучок mvc4, как он работает?

я имею проблему с моим DatePicker теперь, кажется, его CSS файл/тема не загружается должным образом, поэтому я хочу, чтобы проверить, как пучки заказать CSS/JS файлы ... спасибо :)

<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

А поздно ответ на этот вопрос, но ASP.NET MVC заказы файлов по алфавиту. Также вы можете использовать интерфейс 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» (или я предполагаю, что если вы используете «IncludeDirectory» как по вопросу ОП). Если вы явно указываете конкретные файлы, они добавляются в указанном порядке. Источник "Добавление сценариев по умолчанию по умолчанию для их загрузки в алфавитном порядке, что обычно не является тем, что вы хотите ... явное добавление каждого файла менее подвержено ошибкам" - http://www.asp.net/mvc/tutorials/mvc- 4/пакетирования-и-минификация. – pwdst

+0

@pwdst: Да, вы правы, MVC заказывает файлы в алфавитном порядке. Таким образом, ваш комментарий также является вариантом. Я готовлю свой пример для случаев, когда вы не хотите переименовывать свои файлы. – Canavar

5

Вы можете управлять порядком файлов «css» и «js», создавая свои собственные пакеты, как показано на этом thread.

Одна важная вещь, вы должны заменить

BundleTable.Bundles.RegisterTemplateBundles(); 

с

BundleTable.Bundles.EnableDefaultBundles(); 

в Global.asax.cs

Смежные вопросы