Globalização de validação do jQuery com o ASP.NET MVC 3

O Asp.Net MVC 3 tem uma ótima funcionalidade que é a validação no cliente usando o plugin do jQuery validations e usando um script da própria Microsoft a validação é feita sem que seja necessário nenhum codificação especial. Basta usar os atributos do namespace System.ComponentModel.DataAnnotations.

Pra quem não sabe, para fazer essa validação basta adicionar os seguintes scripts (que já estão no template padrão de um novo site Asp.Net Mvc 3):

<script src=”/Scripts/jquery-1.6.2.min.js” type=”text/javascript”></script>
<script src=”/Scripts/jquery.validate.min.js” type=”text/javascript”></script>
<script src=”/Scripts/jquery.validate.unobtrusive.min.js” type=”text/javascript”></script>

Muito simples de verdade! Mas existe um problema, esse script não é globalizado, então digamos que você tenha que usar uma data na sua classe e você gostaria de validá-la, por exemplo eu tinha uma classe que entre outras coisas tinha que salvar uma data, para simplificar, algo como isso:

public class Pessoa
{
    public string Nome { get; set; }
    public string Sexo { get; set; }
    public string Rg { get; set; }

    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [DataType(DataType.Date)]
    public DateTime? DataNascimento { get; set; }
}

Quando eu informava a data 16/09/1980, por exemplo, automaticamente era detectado uma data inválida, já que o esperado é que a data estivesse no padrão mm/dd/aaaa, mas é claro que no Brasil o padrão é outro. Então como corrigir? Primeiro fazer uso do plugin Globalize do jQuery, adicione referências a dois scripts (que é claro, podem ser baixados no site do projeto):

Depois disso, tudo o que precisa ser feito é determinar qual a cultura que quer usar e indicar o parser do globalize para validar a data:

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

Não podia ser mais simples!

  • http://www.facebook.com/Suici Juan Carlos Puerto

    I’m facing this problem right now. However the input is not just the date but DateTime like “30/09/2012 12:00:00 AM”. And JQuery validates “mm/dd/yyyy”. Do you have any idea how can I extend your function to take (or ignore) the time as well? Thank you in advance!

  • Roberto Fonseca

    Mano, estava procurando um artigo, e quem aparece? kkkk é o Rox do curso de Java, tudo beleza cara? Bom, valeu pela dica… 

    • vintem

      Opa, que bom que ajudou :)

  • TTT

    A validação de data NÃO FUNCIONA!

    Que beleza hein?

    • vintem

      Você pode ser mais específico? Porque eu uso exatamente dessa forma que apresentei e funciona.

  • http://www.sunblognuke.com Baldwin Sun

    Awesome tips. We have the same issue for UK date format in MVC3 project and it saved lots of time to look for the fixed solution. Thanks a lot for your sharing.