mvc4捆绑,它是如何工作的? [英] mvc4 bundle, how it is working?

查看:125
本文介绍了mvc4捆绑,它是如何工作的?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在mvc4他们使用捆绑来调用所有的脚本和CSS文件一次。据我知道,当你给他们打电话JS和CS文件的顺序是非常重要的。如果我使用包,我怎么知道,如果CSS和JS文件都在里面捆绑正确的顺序?并且可以自定义我的排序?

我有我现在的日期选择问题,似乎它的CSS文件/主题没有被正确加载,所以我要检查包如何订购的CSS / JS文件...感谢:)

 <链接HREF =@ System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(〜/内容/ CSS)的rel =stylesheet属性类型=文/ CSS/>
<链接HREF =@ System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(〜/内容/主题/基/ CSS)的rel =stylesheet属性类型=文/ CSS/>
&LT;脚本src=\"@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl(\"~/Scripts/js\")\"></script>


解决方案

一个迟到回答这个问题,但ASP.NET MVC订单文件是按字母顺序。你也可以使用<一个href=\"http://msdn.microsoft.com/en-us/library/system.web.optimization.ibundleorderer%28VS.110%29.aspx\">IBundleOrderer接口手动命令你的脚本文件。

例如,使用自定义IBundleOrderer实现这样的:

 捆绑myBundle =新包(〜/包/ SiteScripts,新JsMinify());
myBundle.IncludeDirectory(〜/脚本/ SiteScripts,*的.js);
myBundle.Orderer =新MyBundleOrderer();
bundles.Add(myBundle);

MyBundleOrderer从web.config文件中需要高度重视的脚本:

 公共类MyBundleOrderer:IBundleOrderer
{
    公共IEnumerable的&LT; System.IO.FileInfo&GT; OrderFiles(BundleContext的背景下,IEnumerable的&LT;&的FileInfo GT;文件)
    {
        如果(ConfigurationManager.AppSettings [HighPriorityScripts]!= NULL)
        {
            字符串[] = highPriorityScripts ConfigurationManager.AppSettings [HighPriorityScripts]斯普利特('')。
            清单&LT;&的FileInfo GT; listFiles =新的List&LT;&的FileInfo GT;(文件);
            清单&LT;&的FileInfo GT; orderedFiles =新的List&LT;&的FileInfo GT;();            //为了添加高优先级的文件:
            的foreach(在highPriorityScripts串highPriorityFile)
            {
                FileInfo的nextFileInfo = listFiles.Find(委托(FileInfo的ARG)
                                {
                                    返回arg.Name == highPriorityFile;
                                }
                              );
                如果(nextFileInfo!= NULL)
                {
                    orderedFiles.Add(nextFileInfo);
                }
            }            //添加剩余的文件捆绑:
            的foreach(FileInfo的lowPriorityFile在listFiles)
            {
                如果(!orderedFiles.Contains(lowPriorityFile))
                {
                    orderedFiles.Add(lowPriorityFile);
                }
            }            返回orderedFiles;
        }
        返回的文件;
    }
}

in mvc4 they use bundles to call all the scripts and css files once. as far as i know, the ordering of js and cs files is important when you call them. if i use bundles, how am i going to know if the css and js files are in the correct order inside the bundle? and can i customize the ordering?

i am having a problem with my datepicker now, it seems its css file/theme is not loading properly so i want to check how bundles order the css/js files... thanks :)

<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>

解决方案

A late answer to that question, but ASP.NET MVC orders files by alphabetically. Also you can use IBundleOrderer interface to manually order your script files.

For example, use custom IBundleOrderer implementation like that :

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

MyBundleOrderer takes high priority scripts from web.config file :

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;
    }
}

这篇关于mvc4捆绑,它是如何工作的?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆