我正在尝试在我的ASP.NET MVC5应用程序中使用特定的语言环境(es-CL)。我有以下几点:
我的视图中的默认语言是:<html lang="es-cl">
在BundleConfig.cs中
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"));
在适当的视图中:
@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>
请注意,在globalize.js之前加载jquery.validate.globalize.js脚本,这不是我想要的。
为什么会发生这种情况?是否可以在单个包中依赖包含顺序,或者我是否被迫将这个脚本放在不同的包中并在我的视图中指定它?
发布于 2013-10-12 01:09:53
默认情况下,对于带有通配符的名称,捆绑顺序是按字母顺序排列的(如注释中所指出的)。但是,它也会根据它认为的依赖关系树进行排序,并且jQuery
脚本似乎会排在最前面。您需要创建一个实现IBundleOrder
的对象
class NonOrderingBundleOrderer : IBundleOrderer
{
public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
return files;
}
}
这可以防止默认排序。现在使用它:
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?
发布于 2014-10-28 14:24:49
在MVC 5的最新版本(2014年10月27日)中,您应该使用以下类:
class AsIsBundleOrderer : IBundleOrderer
{
public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
{
return files;
}
}
并像其他响应一样创建包:
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);
发布于 2016-08-03 18:32:04
为了在创建包的过程中减少代码,我建议你创建一个扩展方法。
需要基础架构类:
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命令
bundles.Add(new ScriptBundle("~/bundles/jqueryval")
.NonOrdering()
.Include(
"~/Scripts/globalize/globalize.js",
"~/Scripts/globalize/cultures/globalize.culture.es-CL.js",
//...
);
https://stackoverflow.com/questions/19323409
复制相似问题