Escolar Documentos
Profissional Documentos
Cultura Documentos
Capítulo VII
O servidor web. Conceitos avançados
Validação
• O que é a validação? Imaginemos que vocês têm um site na
web, onde as pessoas se cadastram. Ou seja, criam seu usuário.
Isso é feito todos os dias, para obter uma conta de correio
eletrônico, ou ativar uma rede social.
• Nessa tela de cadastramento, precisam completar muitas
informações; por exemplo, nome, sobrenome, data de
nascimento, telefone, endereço, país, cidade, endereço de
correio eletrônico, etc. Cada um desses dados tem alguma classe
ou tipo. O que significa isso? A data de nascimento tem a forma
de uma data. O nome e o sobrenome são palavras. O correio
eletrônico tem o símbolo “@” e um “.” , o número telefônico
tem números y, em alguns casos, “-“ ou parênteses.
Validação
• Mas, o que acontece na realidade? Como o espaço para inserir
dados nem sempre está programado corretamente, o usuário
poderia inserir dados de natureza errada em nossa interface e,
portanto, teríamos informações incorretas, ou dados sujos.
Assim, o usuário poderia dizer que seu correio eletrônico é, por
exemplo, “João da Silva@ola”. Ou que sua data de nascimento é
“milnovecentos”.
• Por esse motivo, é feita o que chamamos validação de dados.
Isso é, basicamente, corroborar que os dados tenham o tipo e
a forma adequados. Isso não significa que o usuário não possa
mentir, mas, no mínimo, garantimos que os dados cumpram
determinadas regras.
Validação no servidor
• A validação pode ser feita enviando as informações para o
servidor, para que ele as analise e, depois, o aplicativo decida se
elas têm o formato correto e as aprove, ou se serão exibidas
mensagens na interface com os erros encontrados.
• Podemos fazer isso utilizando novamente a estrutura de meu
modelo MVC, cuja visão requeira ao usuário inserir informações,
para que, logo, o controlador envie essas informações para o
modelo. Assim, o modelo decidirá como se atualizará a visão,
levando em conta se os dados inseridos são corretos ou não.
• Como exemplo, vamos mostrar quais seriam os componentes
MVC para inserir um novo dado Pessoa, e outra interface para
poder consultar os dados.
Validação no servidor - Modelo
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace MvcSimpleModelBinding.Models
{
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
public int Zipcode { get; set; }
}
}
Validação no servidor - Controlador
public class PersonController : Controller
{
static List<Person> people = new List<Person>();
public ActionResult Index()
{
return View(people);
}
public ActionResult Details(Person person)
{
return View(person);
}
public ActionResult Create()
{
return View();
}
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(Person person)
{
if (!ModelState.IsValid)
{
return View("Create", person);
}
people.Add(person);
return RedirectToAction("Index");
}
}
Validação no servidor - Visão Index
<h2>Index</h2>
<table>
<tr>
<th></th>
<th>
Id
</th>
<th>
Name
</th>
</tr>
<% foreach (var person in Model) { %>
<tr>
<td><%= Html.ActionLink("Details", "Details", person )%></td>
<td><%= Html.Encode(person.Id) %></td>
<td><%= Html.Encode(person.Name) %></td>
</tr>
<% } %>
</table>
<p>
<%= Html.ActionLink("Create New", "Create") %>
</p>
Validação no servidor - Visão Create
<h2>Create</h2>
<%= Html.ValidationSummary("Create was unsuccessful. Please correct the errors and try again.") %>
<% using (Html.BeginForm()) {%>
<fieldset><legend>Fields</legend>
<p>
<label for="Id">Id:</label><%= Html.TextBox("Id") %><%= Html.ValidationMessage("Id", "*") %>
</p>
<p>
<label for="Name">Name:</label><%= Html.TextBox("Name") %><%= Html.ValidationMessage("Name", "*") %>
</p>
<p>
<label for="Age">Age:</label><%= Html.TextBox("Age") %><%= Html.ValidationMessage("Age", "*") %>
</p>
<p>
<label for="Street">Street:</label><%= Html.TextBox("Street") %><%= Html.ValidationMessage("Street", "*") %>
</p>
<p>
<label for="City">City:</label><%= Html.TextBox("City") %><%= Html.ValidationMessage("City", "*") %>
</p>
<p>
<label for="State">State:</label><%= Html.TextBox("State") %><%= Html.ValidationMessage("State", "*") %>
</p>
<p>
<label for="Zipcode">Zipcode:</label><%= Html.TextBox("Zipcode") %><%= Html.ValidationMessage("Zipcode", "*") %>
</p>
<p><input type="submit" value="Create" /> </p>
</fieldset>
<% } %>
<div><%=Html.ActionLink("Back to List", "Index") %></div>
Validação no servidor – Visão Details
<h2>Details</h2>
<fieldset>
<legend>Fields</legend>
<p>
Id:<%= Html.Encode(Model.Id) %>
</p>
<p>
Name:<%= Html.Encode(Model.Name) %>
</p>
<p>
Age:<%= Html.Encode(Model.Age) %>
</p>
<p>
Street:<%= Html.Encode(Model.Street) %>
</p>
<p>
City:<%= Html.Encode(Model.City) %>
</p>
<p>
State:<%= Html.Encode(Model.State) %>
</p>
<p>
Zipcode:<%= Html.Encode(Model.Zipcode) %>
</p>
</fieldset>
<p><%=Html.ActionLink("Back to List", "Index") %></p>
chamada validateForm, a qual controla se o conteúdo desse campo é null ou vazio. Em caso
positivo, abrirá um popup para informar o erro. A mesma coisa pode ser feita para validar um e-
mail:
<script>
function validateForm()
{
var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length)
{
alert("Not a valid e-mail address");
return false;
}
}
</script>
Validação no cliente
• Finalmente, existe outro tipo de validações que
utiliza a tecnologia JQuery, a qual é muito simples.
Alguns exemplos podem ser consultados em:
http://jqueryvalidation.org/