9

在 mvc4 中,他们使用包来调用所有脚本和 css 文件一次。据我所知,调用 js 和 cs 文件的顺序很重要。如果我使用捆绑包,我如何知道捆绑包中的 css 和 js 文件的顺序是否正确?我可以自定义订购吗?

我现在的日期选择器有问题,它的 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>
4

2 回答 2

5

您可以通过创建自己的包来控制“css”和“js”文件的顺序,如此线程所示。

一件重要的事情是你必须更换

BundleTable.Bundles.RegisterTemplateBundles();

BundleTable.Bundles.EnableDefaultBundles();

在 Global.asax.cs

于 2012-06-01T04:23:01.983 回答
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;
    }
}
于 2012-12-25T08:35:15.920 回答