Leo*_*era 78 javascript asp.net asp.net-mvc
我正在尝试在我的ASP.NET MVC 5应用程序中使用特定的语言环境(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"));
Run Code Online (Sandbox Code Playgroud)
在适当的观点:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/globalization")
}
Run Code Online (Sandbox Code Playgroud)
但是,生成的源代码如下:
<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>
Run Code Online (Sandbox Code Playgroud)
请注意,jquery.validate.globalize.js脚本被加载之前globalize.js,这不是我想要的.
为什么会这样?是否可以在单个包中依赖包含顺序,或者我是否被迫将此单个脚本放在不同的包中并在我的视图中指定它?
Mis*_*pic 98
默认情况下,对于带有通配符的名称,捆绑顺序是按字母顺序排列的(如注释中所述).但是,它也会根据它认为你的依赖树的顺序进行排序,并且jQuery
脚本似乎可以插入到顶部.您需要创建一个实现的对象IBundleOrder
:
class NonOrderingBundleOrderer : IBundleOrderer
{
public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
return files;
}
}
Run Code Online (Sandbox Code Playgroud)
这可以防止默认排序.现在使用它:
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);
Run Code Online (Sandbox Code Playgroud)
参考:http://stevescodingblog.co.uk/changing-the-ordering-for-single-bundles-in-asp-net-4/
为了进一步阅读,MikeSmithDev的问题的答案提供了对流行脚本库的默认排序的进一步了解:
Seb*_*jas 30
在最新版本的MVC 5中(2014年10月27日),你应该使用这个类:
class AsIsBundleOrderer : IBundleOrderer
{
public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
{
return files;
}
}
Run Code Online (Sandbox Code Playgroud)
并像其他响应一样创建包:
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);
Run Code Online (Sandbox Code Playgroud)
RAM*_*RAM 25
要在创建包期间减少代码,我建议您创建一个扩展方法.
需要基础架构类:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在只需使用它:
一体化命令
bundles.Add(new ScriptBundle("~/bundles/jqueryval")
.NonOrdering()
.Include(
"~/Scripts/globalize/globalize.js",
"~/Scripts/globalize/cultures/globalize.culture.es-CL.js",
//...
);
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
42653 次 |
最近记录: |