WebMatrix
- Validando formulários
Continuando a série de artigos básicos sobre o WebMatrix vou falar sobre como realizar a validação de formulários.
Abra o WebMatrix e clique em - Site From Template - para criar um novo site a partir de um modelo;
![]() |
Escolha o modelo Empty Site e informe o nome do site. No exemplo eu dei o nome : ValidaFormulario
![]() |
Vamos incluir na raiz do site um novo arquivo Cadastro.chstml.
Para isso selecione a guia Files e a seguir no menu clique em New -> New File;
Na janela Choose a File Type , clique no tipo CSHTML e informe o nome Cadastro.cshtml e a seguir no botão OK;
![]() |
Altere o conteúdo do arquivo conforme o código abaixo:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Cadastro de Funcionário</title>
</head>
<body>
<h1>Cadastro de Funcionário</h1>
<form action="" method="post">
<fieldset>
<legend>Detalhes Pessoais</legend>
<div>
@Html.Label("Nome: ", "nome")
@Html.TextBox("nome")
</div>
<div>
@Html.Label("Sobrenome : ", "sobrenome")
@Html.TextBox("sobrenome")
</div>
<div>
@Html.Label("Data de nascimento: ", "nascimento")
@Html.TextBox("nascimento")
</div>
</fieldset>
<fieldset>
<legend>Detalhes Profissionais</legend>
<div>
@Html.Label("Departamento: ", "departamento")
@{
var listaDepartamento = new List<SelectListItem>()
{
new SelectListItem { Value = "Admin", Text = "Administração" },
new SelectListItem { Value = "RH", Text = "Recursos Humanos" },
new SelectListItem { Value = "Contabil", Text = "Contabilidade" },
new SelectListItem { Value = "Vendas", Text = "Vendas e Marketing" },
};
}
@Html.DropDownList("departamento", "Não Selecionadao", listaDepartamento)
</div>
<div>
<div>
@Html.Label("Código Funcionário: ", "funcionarioid")
@Html.TextBox("funcionarioid", "", new { maxlength = 4 })
</div>
</div>
</fieldset>
<div>
<input type="submit" value="Incluir Funcionário" />
</div>
</form>
</body>
</html>
|
![]() |
O código da página Cadastro.cshtml gera o formulário visto ao lado. Vamos incluir no início deste arquivo o código razor abaixo:
| @{ if (IsPost) { Response.Redirect("Sucesso.cshtml"); } } |
Se executarmos a página no navegador, podemos ver que um formulário vazio será exibido e se clicarmos sobre no botão - Incluir Funcionario - seremos redirecionados para a página Sucesso.cshtml.
No entanto, não podemos permitir que um formulário vazio seja enviado para processamento, que no momento é perfeitamente possível. Neste exemplo, vamos supor que as informações mínimas que exigimos sobre um empregado novo seja seu nome , seu sobrenome e seu código. Então vamos começar validando apenas essas informações incluindo o código abaixo que tornará essas informações obrigatórias.
No topo da página, vamos adicionar algumas variáveis para armazenar os valores dos campos do nosso formulário. Quando o botão submit for acionado, a página é atualizada e os campos são limpos. Precisamos mostrar os dados apresentados de volta ao usuário no formulário e permitir que o usuário faça correções. Para isso vamos passar essas variáveis para os parâmetros de valor do formulário usando os HTML helpers.
@{
var nome = "";
var sobrenome = "";
var nascimento = DateTime.MinValue;
var departamento = "";
var funcionarioid = "";
if (IsPost)
{
nome = Request["nome"];
sobrenome = Request["sobrenome"];
nascimento = Request["nascimento"].AsDateTime();
departamento = Request["departamento"];
funcionarioid = Request["funcionarioid"];
@*Response.Redirect("Sucesso.cshtml");*@
}
}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Cadastro de Funcionário</title>
</head>
<body>
<h1>Cadastro de Funcionário</h1>
<form action="" method="post">
<fieldset>
<legend>Detalhes Pessoais</legend>
<div>
@Html.Label("Nome: ", "nome")
@Html.TextBox("nome", nome)
</div>
<div>
@Html.Label("Sobrenome : ", "sobrenome")
@Html.TextBox("sobrenome" , sobrenome)
</div>
<div>
@Html.Label("Data de nascimento: ", "nascimento")
@Html.TextBox("nascimento", nascimento.ToShortDateString())
</div>
</fieldset>
<fieldset>
<legend>Detalhes Profissionais</legend>
<div>
@Html.Label("Departamento: ", "departamento")
@{
var listaDepartamento = new List<SelectListItem>()
{
new SelectListItem { Value = "Admin", Text = "Administração" },
new SelectListItem { Value = "RH", Text = "Recursos Humanos" },
new SelectListItem { Value = "Contabil", Text = "Contabilidade" },
new SelectListItem { Value = "Vendas", Text = "Vendas e Marketing" },
};
}
@Html.DropDownList("departamento", "Não Selecionadao", listaDepartamento, departamento, null)
</div>
<div>
<div>
@Html.Label("Código Funcionário: ", "funcionarioid")
@Html.TextBox("funcionarioid", funcionarioid, new { maxlength = 4 })
</div>
</div>
</fieldset>
<div>
<input type="submit" value="Incluir Funcionário" />
</div>
</form>
</body>
</html>
|
O código destacado em azul foi código incluído. Note que comentamos a linha que redireciona para a página Sucesso.cshtml para podermos testar o código.
Usando ModelState
Agora estamos em posição de realizar a nossa primeira parte da validação, que será verificar se os campos nome, sobrenome e codigo do funcionário não estão vazios.
Se um campo estiver vazio, simplesmente queremos registrar o fato e passar para a próxima parte do processo de validação.
Uma vez que todas as validações foram processadas, então vamos informar todos os erros para o usuário, se isso ocorrer.
Para alcançar isso, vamos usar o objeto ModelState da página para armazenar um dicionário de erros (ModelStateDictionary).
No ASP.NET o model refere-se à entidade representada no seu formulário , que em nosso caso é um funcionario, o objeto ModelState armazena o estado (ou seja, a validade) dos dados armazenados em nosso modelo.
Uma vez que todas as validações estejam completas, podemos interrogar a propriedade ModelState.IsValid para determinar se o formulário contém dados válidos. A propriedade ModelState.IsValid será definida para false se qualquer erro for adicionados à ModelStateDictionary.
Nós adicionamos erros de validação para o ModelStateDictionary usando o método ModelState.AddError, passando uma chave (geralmente correspondente com o nome do controle) e a mensagem de erro relevante.
Vamos então alterar o código Razor do início da página conforme abaixo:
| @{ var nome = ""; var sobrenome = ""; var nascimento = DateTime.MinValue; var departamento = ""; var funcionarioid = ""; if (IsPost) { nome = Request["nome"]; sobrenome = Request["sobrenome"]; nascimento = Request["nascimento"].AsDateTime(); departamento = Request["departamento"]; funcionarioid = Request["funcionarioid"]; if (nome.IsEmpty()) { ModelState.AddError("nome", "O campo nome deve ser informado"); } if (sobrenome.IsEmpty()) { ModelState.AddError("sobrenome", "O sobrenome é obrigatório"); } if (funcionarioid.IsEmpty()) { ModelState.AddError("funcionariodi", "O código do funcionário é obrigatório"); } if (ModelState.IsValid) { Response.Redirect("Sucesso.cshtml"); } } } |
Exibindo os resultados da validação
As páginas ASP.NET nos fornecem um par de métodos auxiliares projetados para exibir o feedback de validação aos usuários.
O primeiro destes métodos, Html.ValidationSummary(), exibe uma lista HTML não ordeanda de todas as mensagens de erro de validação realizadas na ModelStateDictionary.
O segundo método, ValidationMessage(), exibe a primeira mensagem de erro encontrada em ModelStateDictionary que corresponde à chave especificada.
Vamos inserir um ValidationSummary na parte superior da página e um ValidationMessage ao lado dos campos do formulário relevantes.
Os helpers de validação também atribuem uma classe CSS para as regiões HTML que eles renderizam.
Os estilos CSS definidos na tag <head> deste exemplo irá ajudar os usuários a identificar o feedback destacando os campos relevantes e as mensagens de erro de validação.
Da mesma forma que os helpers ValidationSummary e ValidationMessage todos os campos do formulário identificados como chaves dentro do ModelStateDictionary também são atribuídos a uma classe CSS que pode ser usada para alterar a aparência das tags relevantes HTML.
Abaixo temos, destacada em azul, no código HTML e os helpers que incluem essas funcionalidades
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Cadastro de Funcionário</title>
<style>
/* Estilos de formulário */
fieldset { margin: 0.5em 0; padding: 0.4em; }
fieldset div { clear: left; padding: 0.3em 0; }
fieldset label { float: left; width: 7em; text-align: right; padding-right: 0.4em;}
legend { text-transform:uppercase; font-weight:bold; }
/* estilos de Validação */
.validation-summary-errors { font-weight: bold; color: #FF0000; }
span.field-validation-error { color: #FF0000; }
input.field-validation-error { border: 1px solid #FF0000; background-color: #FFCCCC; }
</style>
</head>
<body>
<h1>Cadastro de Funcionário</h1>
@Html.ValidationSummary("Corrija os seguintes erros :")
<form action="" method="post">
<fieldset>
<legend>Detalhes Pessoais</legend>
<div>
@Html.Label("Nome: ", "nome")
@Html.TextBox("nome", nome)
@Html.ValidationMessage("nome")
</div>
<div>
@Html.Label("Sobrenome : ", "sobrenome")
@Html.TextBox("sobrenome" , sobrenome)
@Html.ValidationMessage("sobrenome")
</div>
<div>
@Html.Label("Data de nascimento: ", "nascimento")
@Html.TextBox("nascimento", nascimento.ToShortDateString())
</div>
</fieldset>
<fieldset>
<legend>Detalhes Profissionais</legend>
<div>
@Html.Label("Departamento: ", "departamento")
@{
var listaDepartamento = new List<SelectListItem>()
{
new SelectListItem { Value = "Admin", Text = "Administração" },
new SelectListItem { Value = "RH", Text = "Recursos Humanos" },
new SelectListItem { Value = "Contabil", Text = "Contabilidade" },
new SelectListItem { Value = "Vendas", Text = "Vendas e Marketing" },
};
}
@Html.DropDownList("departamento", "Não Selecionadao", listaDepartamento, departamento, null)
</div>
<div>
<div>
@Html.Label("Código Funcionário: ", "funcionarioid")
@Html.TextBox("funcionarioid", funcionarioid, new { maxlength = 4 })
@Html.ValidationMessage("funcionarioid")
</div>
</div>
</fieldset>
<div>
<input type="submit" value="Incluir Funcionário" />
</div>
</form>
</body>
</html>
|
Agora sim temos a implementação da validação definida completa e ao executarmos e tentarmos submeter o formulário incompleto teremos o seguinte resultado:
![]() |
Pegue o projeto completo aqui:
ValidaFormulario.zip
Rom 8:19
Porque a criação aguarda com ardente expectativa a revelação dos filhos de Deus.Rom 8:20
Porquanto a criação ficou sujeita à vaidade, não por sua vontade, mas por causa daquele que a sujeitou,Rom 8:21
na esperança de que também a própria criação há de ser liberta do cativeiro da corrupção, para a liberdade da glória dos filhos de Deus.Referências: