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:
1 2 3 4 5 6 7 8 9 10 11 12 | 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):
<script type=”text/javascript” src=”@Url.Content(“~/Scripts/globalize.js”)”></script>
<script type=”text/javascript” src=”@Url.Content(“~/Scripts/cultures/globalize.culture.pt-BR.js”)”></script>
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:
1 2 3 4 | Globalize.culture("pt-BR"); $.validator.methods.date = function(value, element) { return this.optional(element) || Globalize.parseDate(value); }; |
Não podia ser mais simples!