首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ASP.NET MVC -套件配置顺序

ASP.NET MVC -套件配置顺序
EN

Stack Overflow用户
提问于 2013-10-12 00:53:12
回答 3查看 46.1K关注 0票数 85

我正在尝试在我的ASP.NET MVC5应用程序中使用特定的语言环境(es-CL)。我有以下几点:

我的视图中的默认语言是:<html lang="es-cl">

  • Created a "es-CL"

  • Installed a new

  • Changed in web.configGlobalize,并将其包含在相应的视图中。

在BundleConfig.cs中

代码语言:javascript
复制
bundles.Add(new ScriptBundle("~/bundles/jqueryval")
    .Include("~/Scripts/jquery.validate.js")
    .Include("~/Scripts/jquery.validate.unobtrusive.js"));

bundles.Add(new ScriptBundle("~/bundles/globalization")
    .Include("~/Scripts/globalize/globalize.js")
    .Include("~/Scripts/globalize/cultures/globalize.culture.es-CL.js")
    .Include("~/Scripts/jquery.validate.globalize.js"));

在适当的视图中:

代码语言:javascript
复制
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/globalization")
}

但是,生成的源代码如下:

代码语言:javascript
复制
<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>

请注意,在globalize.js之前加载jquery.validate.globalize.js脚本,这不是我想要的。

为什么会发生这种情况?是否可以在单个包中依赖包含顺序,或者我是否被迫将这个脚本放在不同的包中并在我的视图中指定它?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-12 01:09:53

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

代码语言:javascript
复制
class NonOrderingBundleOrderer : IBundleOrderer
{
    public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
    {
        return files;
    }
}

这可以防止默认排序。现在使用它:

代码语言:javascript
复制
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 NonOrderingBundleOrderer();

bundles.Add(bundle);

参考:http://stevescodingblog.co.uk/changing-the-ordering-for-single-bundles-in-asp-net-4/

为了进一步阅读,MikeSmithDev的问题的答案提供了对流行脚本库的默认顺序的进一步洞察:

Ordering of Files within a bundle - What are the known libraries?

票数 104
EN

Stack Overflow用户

发布于 2014-10-28 14:24:49

在MVC 5的最新版本(2014年10月27日)中,您应该使用以下类:

代码语言:javascript
复制
class AsIsBundleOrderer : IBundleOrderer
{
    public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
    {
        return files;
    }
}

并像其他响应一样创建包:

代码语言:javascript
复制
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);
票数 31
EN

Stack Overflow用户

发布于 2016-08-03 18:32:04

为了在创建包的过程中减少代码,我建议你创建一个扩展方法。

需要基础架构类:

代码语言:javascript
复制
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;
    }
}

现在只需像这样使用它:

All in one命令

代码语言:javascript
复制
bundles.Add(new ScriptBundle("~/bundles/jqueryval")
               .NonOrdering()
               .Include(
                    "~/Scripts/globalize/globalize.js",
                    "~/Scripts/globalize/cultures/globalize.culture.es-CL.js",
                    //...
                );
票数 30
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19323409

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档