javascript - ASP.NET MVC: ordine Config. Bundle
asp.net-mvc (2)
Nell'ultima versione di MVC 5 (al 27 ottobre 2014), dovresti usare questa classe invece:
class AsIsBundleOrderer : IBundleOrderer
{
public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
{
return files;
}
}
E crea il pacchetto come l'altra risposta:
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);
Sto cercando di utilizzare una locale specifica (es-CL) nella mia applicazione ASP.NET MVC 5. Ho il seguente:
- Modificato web.config cultura e cultura in "es-CL"
- Installato i pacchetti Globalize e jQuery.Validation.Globalize
- Modificata la lingua predefinita nelle mie viste:
<html lang="es-cl">
- Creato un nuovo pacchetto e incluso nelle viste appropriate.
In 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"));
Nelle viste appropriate:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/globalization")
}
Tuttavia, il codice sorgente generato è il seguente:
<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>
Si noti che lo script jquery.validate.globalize.js viene caricato prima di globalize.js , che non è quello che voglio.
Perché sta succedendo? È possibile fare affidamento nell'ordine di inclusione in un unico pacchetto o sono obbligato a mettere questo singolo script in un bundle diverso e specificarlo nella mia vista?
Per ridurre i codici durante la creazione di pacchetti, ti suggerisco di creare un metodo di estensione.
Richiedere classi di infrastruttura:
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;
}
}
Ora basta usarlo in questo modo:
Tutto in un comando 😎
bundles.Add(new ScriptBundle("~/bundles/jqueryval")
.NonOrdering().Include(
"~/Scripts/globalize/globalize.js",
"~/Scripts/globalize/cultures/globalize.culture.es-CL.js",
...);