side net mvc formulario form data create asp asp.net-mvc-3 jquery-validate jquery-globalization

asp.net-mvc-3 - formulario - validation asp net mvc



LocalizaciĆ³n de la validaciĆ³n de jquery con asp.net mvc 3 (3)

He estado haciendo lo mismo recientemente. Comencé siguiendo los consejos del blog de Scott Hanselman sobre este tema. Puedes leer sobre esto aquí:

http://www.hanselman.com/blog/GlobalizationInternationalizationAndLocalizationInASPNETMVC3JavaScriptAndJQueryPart1.aspx

Tuve que hacer algunos cambios para usar Globalize en lugar de jQuery Global (ahora jQuery Global está muerto). Escribí esto en la siguiente publicación del blog en caso de que sea útil:

http://icanmakethiswork.blogspot.co.uk/2012/09/globalize-and-jquery-validate.html

La publicación de mi blog incluye un enlace a este script jquery.validate.globalize.js que obliga a jQuery Validate a usar Globalize para el análisis de número / fecha / rango. La parte de la fecha de esto es la parte que probablemente debería resolver su problema:

https://raw.github.com/gist/3651751/68cbccd0fdd4725a8d6fd1b5568bb33d27fb1eff/jquery.validate.globalize.js

/// <reference path="jquery-1.7.2.js" /> /// <reference path="jquery.validate.js" /> /// <reference path="globalize.js" /> /*! * Monkey patch for jquery.validate.js to make use of Globalize.js number and date parsing */ $(document).ready(function () { var currentCulture = $("meta[name=''accept-language'']").prop("content"); // Set Globalize to the current culture driven by the meta tag (if any) if (currentCulture) { Globalize.culture(currentCulture); } //Tell the validator that we want numbers parsed using Globalize.js $.validator.methods.number = function (value, element) { if (Globalize.parseFloat(value)) { return true; } return false; } //Tell the validator that we want dates parsed using Globalize.js $.validator.methods.date = function (value, element) { if (Globalize.parseDate(value)) { return true; } return false; } //Fix the range to use globalized methods jQuery.extend(jQuery.validator.methods, { range: function (value, element, param) { //Use the Globalization plugin to parse the value var val = Globalize.parseFloat(value); return this.optional(element) || (val >= param[0] && val <= param[1]); } }); });

Estoy usando Asp.Net Mvc3 y la validación de jquery discreta. Me gustaría tener mi validación de fechas localizada, quiero decir, jquery está validando mi fecha como MM / dd / aaaa pero me gustaría que fuera dd / MM / aaaa.

Estoy tratando de usar el complemento jQuery Globalize ( http://github.com/jquery/globalize ). Agregué referencias a los scripts globalize.js y globalize.culture.pt-BR.js y cuando mi página se carga, estoy ejecutando el siguiente script:

(function() { $(function() { $.datepicker.setDefaults($.datepicker.regional[''pt-BR'']); Globalize.culture("pt-BR"); }); }).call(this);

El plugin jQuery UI funciona como un hechizo, pero la validación no lo hace. ¿Qué más me estoy perdiendo?

Editar:

Usando los enlaces en la respuesta a continuación, resolví el problema usando el complemento Globalize :

Por supuesto, tuve que agregar una referencia al complemento Globalize en la página y también una referencia a la cultura que quería usar (todo disponible en el sitio del complemento). Después de eso es sólo una pequeña pieza de código JavaScript.

Globalize.culture("pt-BR"); $.validator.methods.date = function(value, element) { return this.optional(element) || Globalize.parseDate(value); };


Poca corrección de respuesta de Johnny Reilly:

$.validator.methods.number = function (value, element) { if (Globalize.parseFloat(value)) { return true; } return false; }

debe ser reemplazado con

$.validator.methods.number = function (value, element) { return !isNaN(Globalize.parseFloat(value)); }

para un correcto análisis de la cadena cero ("0").

Así que todo el código es:

/// <reference path="jquery-1.7.2.js" /> /// <reference path="jquery.validate.js" /> /// <reference path="globalize.js" /> /*! * Monkey patch for jquery.validate.js to make use of Globalize.js number and date parsing */ $(document).ready(function () { var currentCulture = $("meta[name=''accept-language'']").prop("content"); // Set Globalize to the current culture driven by the meta tag (if any) if (currentCulture) { Globalize.culture(currentCulture); } //Tell the validator that we want numbers parsed using Globalize.js $.validator.methods.number = function (value, element) { return !isNaN(Globalize.parseFloat(value)); } //Tell the validator that we want dates parsed using Globalize.js $.validator.methods.date = function (value, element) { if (Globalize.parseDate(value)) { return true; } return false; } //Fix the range to use globalized methods jQuery.extend(jQuery.validator.methods, { range: function (value, element, param) { //Use the Globalization plugin to parse the value var val = Globalize.parseFloat(value); return this.optional(element) || (val >= param[0] && val <= param[1]); } }); });


Si está realizando algún trabajo con internacionalización y ASP.NET MVC, le recomiendo que lea estos dos excelentes mensajes de Nadeem Afana.

En su segunda publicación, tiene un ejemplo detallado de cómo usar el selector de fechas de jQuery UI y analiza los problemas con la localización.

En su ejemplo menciona los siguientes

@* Unfortunately, the datepicker only supports Neutral cultures, so we need to adjust date and time format to the specific culture *@ $("#EventDate").change(function(){ $(this).val(Globalize.format($(this).datetimepicker(''getDate''), Globalize.culture().calendar.patterns.d + " " + Globalize.culture().calendar.patterns.t)); /*d t*/ });

También recomiendo descargar la demo de internacionalización de Nerd Dinner enlazada en su sitio.