Validação de Data e Moeda (ASP.Net MVC + JQuery Validation) em Português
Sempre vejo na internet um monte de solução para a validação de data e moeda em Português (PT-Br) uma mais complicada que a outra. Já se perguntou: isso deveria ser simples? e é super simples, veja como agora.
Validando data e moeda em ASP.Net MVC
Para exemplificar eu criei um projeto “ASP.Net MVC 4 Web Application” e usei o template “Basic”, uma vez criado o projeto foi feito os seguintes passos:
1. Globalizando o ASP.Net MVC para PT-Br
É pouco divulgado, mais existe uma versão do MVC (Microsoft.AspNet.Mvc) em Português, feita pelo pessoal do time do ASP .Net MVC da Microsoft e esta versão traduz para você as mensagens de erro para o português.
Sua instalação é bem simplificada feita usando o pacato de nuget “Microsoft.AspNet.Mvc.pt-br”, para instalar digite o seguinte comando no Package Manager Console (Tools/Library Package Manager/Package Manager Console):
PM> Install-Package Microsoft.AspNet.Mvc.pt-br
Isto irá instalar o MVC em Português, e atualizar as suas dependências.
2. Globalizando jQuery Validation para PT-Br
O jQuery Valitation é o responsável pela validação do lado do cliente, para globalizar ele para PT-Br precisamos criar um novo arquivo na pasta “Scripts” chamado “methods_pt.js” com o seguinte conteúdo:
/* * Localized default methods for the jQuery validation plugin. * Locale: PT_BR */ jQuery.extend(jQuery.validator.methods, { date: function (value, element) { return this.optional(element) || /^\d\d?\/\d\d?\/\d\d\d?\d?$/.test(value); }, number: function (value, element) { return this.optional(element) || /^-?(?:\d+|\d{1,3}(?:\.\d{3})+)(?:,\d+)?$/.test(value); } });
Com isso o jQuery Validation passa a validar data no formato “dd/mm/yyyy” e moeda agora usa o separador “,” para as casas decimais e não mais o “.” como é o padrão americano.
3. Atualizando o Bundle do jQueryval
Agora podemos atualizar o Bundle do JQuery Validation “jQueryval”, para isso precisamos abrir o arquivo “BundleConfig.cs” que esta na pasta do seu projeto “App_Start” e alterar o bundle “jqueryval” e adicionar o arquivo “methods_pt.js” criado anteriormente.
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include( "~/Scripts/jquery.unobtrusive*", "~/Scripts/jquery.validate*", "~/Scripts/methods_pt.js"));
Pronto agora é só usar!
4. Testando a validação em Português
Para efeito de teste eu crie um model chamado “Produto.cs” com o seguinte código:
public class Produto { public string Nome { get; set; } public DateTime Validade { get; set; } public decimal Valor { get; set; } }
Agora foi só criar um controle “Home” com uma action “Index” e gerar um scafolld para “Create”, veja o código do controle e da view abaixo:
HomeController.cs
using System.Web.Mvc; using ValidandoDataeMoeda.Models; namespace ValidandoDataeMoeda.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } [HttpPost] public ActionResult Index(Produto produto) { return View(produto); } } }
e o código da View, Index.cshtml
@model ValidandoDataeMoeda.Models.Produto @{ ViewBag.Title = "Index"; } <h2>Validando Data e Moeda em ASP.Net MVC 4</h2> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Produto</legend> <div class="editor-label"> @Html.LabelFor(model => model.Nome) </div> <div class="editor-field"> @Html.EditorFor(model => model.Nome) @Html.ValidationMessageFor(model => model.Nome) </div> <div class="editor-label"> @Html.LabelFor(model => model.Validade) </div> <div class="editor-field"> @Html.EditorFor(model => model.Validade) @Html.ValidationMessageFor(model => model.Validade) </div> <div class="editor-label"> @Html.LabelFor(model => model.Valor) </div> <div class="editor-field"> @Html.EditorFor(model => model.Valor) @Html.ValidationMessageFor(model => model.Valor) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> } @section Scripts { @Scripts.Render("~/bundles/jqueryval") }
Como de costume você pode baixar o código no meu GitHub.
Bom pessoal era isso! e ajudem a divulgar se possível!