Javascript ASP.NET MVC-捆绑包配置顺序

Javascript ASP.NET MVC-捆绑包配置顺序,javascript,asp.net,asp.net-mvc,Javascript,Asp.net,Asp.net Mvc,我试图在我的ASP.NETMVC5应用程序中使用特定的语言环境(ESCL)。我有以下建议: <script src="/Scripts/jquery.validate.js"></script> <script src="/Scripts/jquery.validate.unobtrusive.js"></script> <script src="/Scripts/jquery.validate.globalize.js"></

我试图在我的ASP.NETMVC5应用程序中使用特定的语言环境(ESCL)。我有以下建议:

<script src="/Scripts/jquery.validate.js"></script>
<script src="/Scripts/jquery.validate.unobtrusive.js"></script>

<script src="/Scripts/jquery.validate.globalize.js"></script>
<script src="/Scripts/globalize/globalize.js"></script>
<script src="/Scripts/globalize/cultures/globalize.culture.es-CL.js"></script>
  • 将web.config uiculture和culture更改为“es CL”
  • 安装了和软件包
  • 更改了“我的视图”中的默认语言:
  • 创建了一个新包并包含在相应的视图中
  • 在BundleConfig.cs中:

    在适当的意见中:

    @section Scripts {
        @Scripts.Render("~/bundles/jqueryval")
        @Scripts.Render("~/bundles/globalization")
    }
    
    但是,生成的源代码如下所示:

    <script src="/Scripts/jquery.validate.js"></script>
    <script src="/Scripts/jquery.validate.unobtrusive.js"></script>
    
    <script src="/Scripts/jquery.validate.globalize.js"></script>
    <script src="/Scripts/globalize/globalize.js"></script>
    <script src="/Scripts/globalize/cultures/globalize.culture.es-CL.js"></script>
    
    
    
    请注意,jquery.validate.globalize.js脚本是在globalize.js之前加载的,这不是我想要的


    为什么会这样?是否可以在单个捆绑包中依赖include顺序,或者我必须将此脚本放在另一个捆绑包中并在我的视图中指定它?

    默认情况下,带有通配符的名称的捆绑顺序是按字母顺序排列的(如注释中所指出的)。然而,它也会根据它认为您的依赖关系树是什么来排序,而且
    jQuery
    脚本似乎排到了最前面。您需要创建一个实现
    IBundleOrder
    的对象:

    class NonOrderingBundleOrderer : IBundleOrderer
    {
        public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
        {
            return files;
        }
    }
    
    参考:

    为了进一步阅读,对MikeSmithDev问题的回答进一步深入了解了流行脚本库的默认顺序:


    在MVC 5的最后一个版本(2014年10月27日)中,您应该使用这个类:

    class AsIsBundleOrderer : IBundleOrderer
    {
        public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
        {
            return files;
        }
    }
    

    要在创建bundle时减少代码,我建议您创建一个扩展方法

    需要基础结构类:

    class NonOrderingBundleOrderer : IBundleOrderer
    {
        public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
        {
            return files;
        }
    }
    
    
    static class BundleExtentions
    {
        public static Bundle NonOrdering(this Bundle bundle)
        {
            bundle.Orderer=new NonOrderingBundleOrderer();
            return bundle;
        }
    }
    
    class NonOrderingBundleOrderer:IBundleOrderer
    {
    公共IEnumerable OrderFiles(BundleContext,IEnumerable文件)
    {
    归还文件;
    }
    }
    静态类BundleExtensions
    {
    公共静态捆绑包未排序(此捆绑包)
    {
    bundle.order=new nonorderingbundleorder();
    返回包;
    }
    }
    
    现在只需像这样使用它:


    多功能一体式命令看看这个问题@PaulMcCowat是的,但我还没有使用缩小版。我使用的是Microsoft.AspNet.Web.Optimizations 1.1.0。@Leonardoherra我想这就像Chris在评论中提到的,已知文件会按照捆绑程序指定的顺序移动。。。但我不能确定,因为我不知道这些文件是什么,哪些。我很想知道使用iBundleOrder是否对您有效,因为指定的顺序没有。请查看[此链接][1][1]中的@Softlion answer:
    @section Scripts{@Scripts.Render(“~/bundles/jqueryval”)}
    似乎已经解决了我的脚本加载无序的问题……不是吹毛求疵,而是默认情况下,捆绑顺序按字母顺序排列“当你使用外卡之类的东西时。。。当您像他那样指定订单时,它应该使用他的订单。我只能假设绑定器正在移动已知的文件类型,并且忽略了他的订单。看起来绑定器也使用了一些关于依赖关系的逻辑来进行订单。它认为另外两个需要
    jquery.validate.globalize.js
    。参考文献:“[bundler]甚至会自动将已知的框架javascript文件(如jQuery或Prototype脚本)放在捆绑包的第一位,以确保它们在您自己使用其类型的代码执行之前运行”具体顺序是:jquery.js jquery-min.js jquery-*jquery ui*jquery.ui*jquery.unobtrusive*jquery.validate*modernizer-*dojo.*mootools核心*mootools-*prototype.js原型-*scriptaculous-*ext.js ext-*这里是编程不好玩的地方。为什么VS会让这件事变得复杂?事实上,这件事的存在让我感到多么愚蠢。真正地bundler比我输入依赖项更清楚如何排序?大口喝(甚至咕噜)FTW!我在哪里可以找到这些信息?你能提供一个链接吗?我只是尝试使用当前回答这个问题的方法,但是我在ASP.NET MVC 5中发现我的selkf有一个错误,所以我检查了IBundleOrderer接口并进行了更改。没有Orderer属性。我使用MVC 5.2.XI只是用MVC 5.2.3测试它,TeRes是Orthor属性。不错的思考方式!
    var bundle = new ScriptBundle("~/bundles/globalization")
    .Include("~/Scripts/globalize/globalize.js")
    .Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
    .Include("~/Scripts/jquery.validate.globalize.js");
    
    bundle.Orderer = new AsIsBundleOrderer();
    
    bundles.Add(bundle);
    
    class NonOrderingBundleOrderer : IBundleOrderer
    {
        public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
        {
            return files;
        }
    }
    
    
    static class BundleExtentions
    {
        public static Bundle NonOrdering(this Bundle bundle)
        {
            bundle.Orderer=new NonOrderingBundleOrderer();
            return bundle;
        }
    }