Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Localizing jquery validation with asp.net mvc 3

Tags:

I am using Asp.Net Mvc3 and the unobtrusive jquery validation. I'd like to have my dates validation localized, I mean, jquery is validating my date as being MM/dd/yyyy but I would like it to be dd/MM/yyyy.

I'm trying to use the jQuery Globalize plugin (http://github.com/jquery/globalize). I added references to the scripts globalize.js and globalize.culture.pt-BR.js and when my page loads I'm running the follwing script:

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

The jQuery UI plugin works as charm, but the validation doesn't. What else am I missing?

Edit:

Using the links in the answer below I solved the problem using the Globalize plugin:

Of course, I had to add a reference to the Globalize plugin in the page and also a reference to the culture that I wanted to use (all available on the plugin's site). After that is just a small piece of JavaScript code.

Globalize.culture("pt-BR"); $.validator.methods.date = function(value, element) {     return this.optional(element) || Globalize.parseDate(value); }; 
like image 363
thitemple Avatar asked Sep 15 '11 23:09

thitemple


People also ask

How we can use jQuery validation plugins in MVC?

UnobtrusiveJavaScriptEnabled" property value back to false and create a new file in "Scripts" folder and name it "script-custom-validator. js". Add the Jquery validator code in it as shown below i.e. The above piece of code attaches my account register form with jQuery form validator by using form ID.

Which of the following methods can be used to perform validations in MVC?

The following three type of validations we can do in ASP.NET MVC web applications: HTML validation / JavaScript validation. ASP.NET MVC Model validation. Database validation.


2 Answers

I've been doing similar myself recently. I started by following the advice in Scott Hanselman's blog on this topic - you can read about this here:

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

I had to make some changes to use Globalize instead of jQuery Global (now jQuery Global is dead). I wrote this up in the following blog post in case that's helpful:

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

My blog post features a link to this script jquery.validate.globalize.js which forces jQuery Validate to use Globalize for number / date / range parsing. The date part of this is the part that should probably solve your issue:

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]);         }     });  }); 
like image 141
John Reilly Avatar answered Oct 08 '22 00:10

John Reilly


If you are doing any work with internationalization and ASP.NET MVC I highly recommend reading through these two excellent posts by Nadeem Afana

  • ASP.NET MVC 3 Internationalization
  • ASP.NET MVC 3 Internationalization - Part 2 (NerdDinner Demo)

In his second post he has a detailed example of using the jQuery UI datepicker and discusses the issues with localization.

In his example he mentions the following

@* 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*/     }); 

i also recommend downloading the Nerd Dinner internationalization demo linked on his site.

like image 41
brodie Avatar answered Oct 08 '22 00:10

brodie