J'essaie d'utiliser des paramètres régionaux spécifiques (es-CL) dans mon application ASP.NET MVC 5. J'ai le suivant:
<html lang="es-cl">
Dans 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"));
Dans les vues appropriées:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/globalization")
}
Cependant, le code source généré est le suivant:
<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>
Veuillez noter que le script jquery.validate.globalize.js est chargé avant globalize.js , ce qui n'est pas ce que je veux.
Pourquoi cela arrive-t-il? Est-il possible d'inclure l'ordre d'inclusion dans un seul lot ou suis-je obligé de placer ce script unique dans un autre paquet et de le spécifier à mon avis?
Par défaut, l'ordre de regroupement est alphabétique pour les noms avec des caractères génériques (comme indiqué dans les commentaires). Cependant, il ordonne également en fonction de ce qu’il pense de votre arbre de dépendance, et les scripts jQuery
semblent être placés en haut. Vous devez créer un objet qui implémente IBundleOrder
:
class NonOrderingBundleOrderer : IBundleOrderer
{
public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files)
{
return files;
}
}
Cela empêche la commande par défaut. Maintenant pour l'utiliser:
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);
ref: http://stevescodingblog.co.uk/changing-the-ordering-for-single-bundles-in-asp-net-4/
Pour en savoir plus, une réponse à la question de MikeSmithDev permet de mieux comprendre le classement par défaut des bibliothèques de scripts populaires:
Commande de fichiers dans un paquet - Quelles sont les bibliothèques connues?
Dans la dernière version de MVC 5 (au 27 octobre 2014), vous devriez plutôt utiliser cette classe:
class AsIsBundleOrderer : IBundleOrderer
{
public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files)
{
return files;
}
}
Et créez le paquet comme l’autre réponse:
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);
Pour réduire les codes lors de la création d'ensembles, je vous suggère de créer une méthode d'extension.
Exiger des classes d'infrastructure:
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;
}
}
Maintenant, utilisez-le simplement comme ceci:
commande tout en un ????
bundles.Add(new ScriptBundle("~/bundles/jqueryval")
.NonOrdering()
.Include(
"~/Scripts/globalize/globalize.js",
"~/Scripts/globalize/cultures/globalize.culture.es-CL.js",
//...
);