Cuando se usa cultura de globalización="da-DK" en el archivo Web.config, la validación de jQuery no funciona.
En Dinamarca, usamos la notación 19,95 en lugar de la forma estadounidense 19,95 cuando escribimos el precio de un producto, y eso me ha dado un problema que no puedo resolver.
Inicié VS2010, nuevo proyecto MVC 3, agregué un controlador de inicio, una clase de producto y una vista de edición estándar simple y el error ya está allí.
Clase de producto:
public class Product { public string name { get; set; } public string itemNo { get; set; } public decimal price { get; set; } }Controlador de inicio:
public class homeController : Controller { public ActionResult Index() { var product1 = new Product { name = "Testproduct", itemNo = "PRD-151541", price = 19 }; return View(product1); } }Vista de índice:
@model WebUI.DomainModel.Product <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Product</legend> <div class="editor-label"> @Html.LabelFor(model => model.name) </div> <div class="editor-field"> @Html.EditorFor(model => model.name) @Html.ValidationMessageFor(model => model.name) </div> <div class="editor-label"> @Html.LabelFor(model => model.itemNo) </div> <div class="editor-field"> @Html.EditorFor(model => model.itemNo) @Html.ValidationMessageFor(model => model.itemNo) </div> <div class="editor-label"> @Html.LabelFor(model => model.price) </div> <div class="editor-field"> @Html.EditorFor(model => model.price) @Html.ValidationMessageFor(model => model.price) </div> <p> <input type="submit" value="Save" /> </p> </fieldset> }El resultado:
Lamentablemente, no puedo enviar una imagen aquí; siga este enlace para ver el resultado: http://www.designvision.dk/temp/mvc3_razor_validation_error.gif
SO: al ejecutar el sitio web, el campo se establecerá en 19,00, que ES la definición cultural correcta, pero al intentar guardar, la validación falla.
Por favor ayuda...
Puede probar el complemento jQuery Globalization de Microsoft:
<script src="@Url.Content("~/Scripts/jquery.validate.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.glob.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/globinfo/jquery.glob.da-dk.js")" type="text/javascript"></script> <script type="text/javascript"> $.validator.methods.number = function (value, element) { return !isNaN($.parseFloat(value)); } $(function () { $.preferCulture('da-DK'); }); </script>Se cambió el nombre del complemento y se movió, debe usar Globalize (marzo de 2012)
<script src="@Url.Content("~/Scripts/jquery.globalize/globalize.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.globalize/cultures/globalize.culture.da-DK.js")" type="text/javascript"></script> <script type="text/javascript"> $.validator.methods.number = function (value, element) { return !isNaN(Globalize.parseFloat(value)); } $(document).ready(function () { Globalize.culture('da-DK'); }); </script>más sobre esto en la publicación del blog de Scott Hanselman
Script actualizado para la versión actual de https://github.com/jquery/globalize con soporte de elementos opcionales
$.validator.methods.number = function (value, element) { return this.optional(element) || !isNaN(Globalize.parseFloat(value)); } $(function () { Globalize.culture('%%culture%%'); });@shatl tiene la respuesta correcta a partir de hoy. Tenga en cuenta que para el atributo de rango necesitará un truco que se muestra a continuación. El código completo para agregar se muestra a continuación:
@section Scripts { @Scripts.Render("~/bundles/jqueryval") <script type="text/javascript" src="~/Scripts/globalize.js"></script> <script type="text/javascript" src="~/Scripts/globalize.culture.fr-FR.js"></script> <script type="text/javascript"> $.validator.methods.number = function (value, element) { return this.optional(element) || !isNaN(Globalize.parseFloat(value)); } $(document).ready(function () { Globalize.culture('fr-FR'); }); jQuery.extend(jQuery.validator.methods, { range: function (value, element, param) { //Use the Globalization plugin to parse the value var val = $.global.parseFloat(value); return this.optional(element) || ( val >= param[0] && val <= param[1]); } }); </script> }