Ich versuche, ein bestimmtes Gebietsschema (es-CL) in meiner ASP.NET MVC 5-Anwendung zu verwenden. Ich habe folgendes:
- Die Kultur und Kultur von web.config wurde in "es-CL" geändert.
- Installierte die Pakete Globalize und jQuery.Validation.Globalize
- Die Standardsprache in meinen Ansichten wurde geändert:
<html lang="es-cl">
- Erstellt ein neues Bundle und wird in die entsprechenden Ansichten aufgenommen.
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"));
In den entsprechenden Ansichten:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
@Scripts.Render("~/bundles/globalization")
}
Der generierte Quellcode lautet jedoch wie folgt:
<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>
Bitte beachten Sie, dass das Skript jquery.validate.globalize.js vor globalize.js geladen wird, was ich nicht möchte.
Warum passiert das? Ist es möglich, sich auf die Include-Reihenfolge in einem einzelnen Bundle zu verlassen, oder bin ich gezwungen, dieses einzelne Skript in ein anderes Bundle zu stellen und es meiner Ansicht nach anzugeben?
javascript
asp.net
asp.net-mvc
Leonardo Herrera
quelle
quelle
@section Scripts { @Scripts.Render("~/bundles/jqueryval") }
scheint das Problem behoben zu haben, dass meine Skripte nicht in derAntworten:
Standardmäßig ist die Bündelungsreihenfolge für Namen mit Platzhaltern alphabetisch (wie in den Kommentaren angegeben). Die Reihenfolge basiert jedoch auch darauf, was Ihrer Meinung nach Ihr Abhängigkeitsbaum ist, und
jQuery
Skripte scheinen nach oben verschoben zu werden. Sie müssen ein Objekt erstellen, das Folgendes implementiertIBundleOrder
:class NonOrderingBundleOrderer : IBundleOrderer { public IEnumerable<FileInfo> OrderFiles(BundleContext context, IEnumerable<FileInfo> files) { return files; } }
Dies verhindert die Standardbestellung. Nun, um es zu benutzen:
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/
Zur weiteren Lektüre bietet eine Antwort auf die Frage von MikeSmithDev weitere Einblicke in die Standardreihenfolge für beliebte Skriptbibliotheken:
Reihenfolge der Dateien innerhalb eines Bundles - Welche Bibliotheken sind bekannt?
quelle
jquery.validate.globalize.js
dies für die beiden anderen erforderlich ist. Aus dem Verweis: "[Der Bundler] wird sogar bekannte Framework-Javascript-Dateien automatisch in das Bundle einfügen, z. B. jQuery- oder Prototype-Skripte, um sicherzustellen, dass sie ausgeführt werden, bevor Ihr eigener Code, der ihre Typen verwendet, ausgeführt wird"In der letzten Version von MVC 5 (am 27. Oktober 2014) sollten Sie stattdessen diese Klasse verwenden:
class AsIsBundleOrderer : IBundleOrderer { public IEnumerable<BundleFile> OrderFiles(BundleContext context, IEnumerable<BundleFile> files) { return files; } }
Und erstellen Sie das Bundle wie die andere Antwort:
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);
quelle
Um die Codes beim Erstellen von Bundles zu reduzieren , empfehle ich Ihnen, eine Erweiterungsmethode zu erstellen.
Infrastrukturklassen erforderlich:
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; } }
bundles.Add(new ScriptBundle("~/bundles/jqueryval") .NonOrdering() .Include( "~/Scripts/globalize/globalize.js", "~/Scripts/globalize/cultures/globalize.culture.es-CL.js", //... );
quelle