A maior rede de estudos do Brasil

Grátis
244 pág.
Desenvolvimento Web - MVC

Pré-visualização | Página 26 de 41

(ModelState.IsValid)
22 {
23 K19Context ctx = new K19Context ();
24 ctx.Jogadores.Add(j);
25 ctx.SaveChanges ();
26 return RedirectToAction("Lista");
27 }
28 else
29 {
30 return View("Cadastra", j);
31 }
32 }
www.facebook.com/k19treinamentos 147
VALIDAÇÃO 148
33 ...
Código C# 8.7: JogadorController.cs
8 Altere o formulário de cadastro de jogador. Para isso, modifique o arquivo Cadastra.cshtml da
pasta Views/Jogador.
1 @model Validacao.Models.Jogador
2
3 @{
4 ViewBag.Title = "Cadastra";
5 }
6
7 <h2>Cadastra </h2>
8
9 @using (Html.BeginForm ())
10 {
11 @Html.ValidationSummary(true)
12
13 <div>@Html.LabelFor(m => m.Nome)</div>
14 @Html.EditorFor(m => m.Nome)
15 @Html.ValidationMessageFor(m => m.Nome)
16
17 <div>@Html.LabelFor(m => m.Numero)</div>
18 @Html.EditorFor(m => m.Numero)
19 @Html.ValidationMessageFor(m => m.Numero)
20
21 <div>@Html.LabelFor(m => m.Altura)</div>
22 @Html.EditorFor(m => m.Altura)
23 @Html.ValidationMessageFor(m => m.Altura)
24
25 <div><input type="submit" value="Cadastrar" /></div>
26 }
Código CSHTML 8.3: Cadastra.cshtml
Teste as validações cadastrando alguns jogadores através da url http://localhost:<PORTA_
APP>/Jogador/Cadastra.
Anotações
As lógicas de validação também podem ser definidas através de anotações adicionadas nas clas-
ses de modelo. Dessa forma, essas lógicas não estariam mais nos controladores, o que conceitual-
mente é o ideal, pois nos controladores só deveria existir lógica para controlar o fluxo da execução.
Required
Uma das validações mais comuns é a de campo obrigatório. Ela pode ser realizada através da
anotação Required para propriedades do tipo string.
1 public class Editora
2 {
3 [Required]
4 public string Nome { get; set;}
5
6 ...
7 }
Código C# 8.8: Editora.cs
148 www.k19.com.br
149 VALIDAÇÃO
Com essa anotação, a lógica de validação pode ser retirada do controlador Editora.
1 ...
2 [HttpPost]
3 public ActionResult Salva(Editora editora)
4 {
5 if (ModelState.IsValid)
6 {
7 db.Editoras.Add(editora);
8 return RedirectToAction("Index");
9 }
10 else
11 {
12 return View("Cadastra", editora);
13 }
14 }
15 ...
Código C# 8.9: EditoraController.cs
Alterando a mensagem
As anotações de validação possuem mensagens padrão que podem ser alteradas através do atri-
buto ErrorMessage.
1 ...
2 [Required(ErrorMessage="O campo Nome é obrigatório")]
3 public string Nome { get; set; }
4 ...
Outros validadores
Há outras anotações para validação:
• Range
• ReqularExpression
• StringLength
Validação no lado do Cliente
As validações podem ser realizadas também nos navegadores para melhorar a interação com os
usuários.
Antes da terceira versão do ASP.NET MVC, era necessário habilitar a validação no lado do cliente
através do método Html.EnableClientValidation(). A partir da terceira versão do ASP.NET MVC,
a validação no cliente está habilitada por padrão.
Para que a validação no lado cliente funcione corretamente, devemos acrescentar as bibliotecas
javascript necessárias. No ASP.NET MVC 4, basta acrescentar a seção de scripts nas páginas.
1 @section Scripts {
2 @Scripts.Render("~/ bundles/jqueryval")
3 }
www.facebook.com/k19treinamentos 149
VALIDAÇÃO 150
Exercícios de Fixação
9 Altere a entidade Jogador acrescentando as anotações de validação.
1 namespace Validacao.Models
2 {
3 public class Jogador
4 {
5 [HiddenInput(DisplayValue = false)]
6 public int JogadorID { get; set; }
7
8 [Required(ErrorMessage="O nome do jogador é obrigatório")]
9 public string Nome { get; set; }
10
11 [Required(ErrorMessage="O número do jogador é obrigatório")]
12 [Range(1, 99,
13 ErrorMessage="O número do jogador deve ser maior que 0 e menor que 100")]
14 public int? Numero { get; set; }
15
16 [Required(ErrorMessage="A altura do jogador é obrigatória")]
17 [Range(0, double.MaxValue ,
18 ErrorMessage="A altura do jogador não pode ser negativa")]
19 public double? Altura { get; set; }
20 }
21 }
Código C# 8.11: Jogador.cs
10 Altere a ação Cadastra do controlador Jogador.
1 ...
2 [HttpPost]
3 public ActionResult Cadastra(Jogador j)
4 {
5 if (ModelState.IsValid)
6 {
7 K19Context ctx = new K19Context ();
8 ctx.Jogadores.Add(j);
9 ctx.SaveChanges ();
10 return RedirectToAction("Lista");
11 }
12 else
13 {
14 return View("Cadastra", j);
15 }
16 }
17 ...
Código C# 8.12: JogadorController.cs
Importante: Apague a base de dados Validacao.Models.K19Context
Para ver o resultado, acesse a url http://localhost:<PORTA_APP>/Jogador/Cadastra.
11 Para adicionar a validação no lado do cliente, basta alterar a página de cadastro de jogadores.
Observe o código abaixo.
150 www.k19.com.br
151 VALIDAÇÃO
1 @model Validacao.Models.Jogador
2
3 @{
4 ViewBag.Title = "Cadastra";
5 }
6
7 <h2>Cadastra </h2>
8
9 @using (Html.BeginForm ())
10 {
11 @Html.ValidationSummary(true)
12
13 <div>@Html.LabelFor(m => m.Nome)</div>
14 @Html.EditorFor(m => m.Nome)
15 @Html.ValidationMessageFor(m => m.Nome)
16
17 <div>@Html.LabelFor(m => m.Numero)</div>
18 @Html.EditorFor(m => m.Numero)
19 @Html.ValidationMessageFor(m => m.Numero)
20
21 <div>@Html.LabelFor(m => m.Altura)</div>
22 @Html.EditorFor(m => m.Altura)
23 @Html.ValidationMessageFor(m => m.Altura)
24
25 <div><input type="submit" value="Cadastrar" /></div>
26
27 @section Scripts {
28 @Scripts.Render("~/ bundles/jqueryval")
29 }
30 }
Código CSHTML 8.5: Cadastra.cshtml
Para testar, acesse a url http://localhost:<PORTA_APP>/Jogador/Cadastra.
www.facebook.com/k19treinamentos 151
VALIDAÇÃO 152
152 www.k19.com.br
SESSÃO
C
A
P
Í
T
U
L
O
9
Considere a aplicação de uma loja virtual. Nessa aplicação, os clientes selecionam os produtos
desejados e os adiciona no seu carrinho de compra. Cada cliente deve ter o seu próprio carrinho para
que os seus produtos não se misturem com os produtos selecionados por outros clientes. A aplicação
deve armazenar o carrinho de um cliente até que a compra seja finalizada ou até ela ter certeza que
o cliente não precisa mais do carrinho.
Para resolver esse problema, podemos utilizar o conceito de Sessão. Para cada navegador co-
nectado, o servidor manterá uma sessão aberta. Dessa forma, podemos separar os dados de cada
usuário conectado.
Identificando os navegadores
Para aplicar a ideia de Sessão, é necessário ter a capacidade de identificar o navegador que está
requisitando a aplicação a cada requisição. Uma primeira abordagem seria utilizar o endereço IP da
máquinas para identificar os navegadores. Porém, nessa abordagem, dois navegadores executando
na mesma máquina não poderiam ser identificados individualmente.
Outra abordagem é deixar a cargo do servidor a criação de um identificador único para cada
navegador conectado. Quando um navegador faz a primeira requisição para a aplicação, o servi-
dor deve gerar um identificador único para esse navegador e enviá-lo na resposta HTTP. A partir da
segunda requisição, os navegadores devem enviar para a aplicação o identificador recebido na pri-
meira requisição. Desta maneira, a aplicação saberá qual é o navegador que está realizando uma
requisição. Os navegadores podem enviar os seus respectivos identificadores de diferentes formas.
As mais utilizadas são:
Reescrita de URL Nesta abordagem, os identificadores são embutidos nos links e botões das páginas
da aplicação. Quando os links ou botões são clicados pelo usuário, o identificador é enviado
para a aplicação. Uma desvantagem é que todas as páginas devem ser geradas dinamicamente
para adicionar o identificador em todos os links e botões.
Cookies Cookies são arquivos contendo informações. Eles são gerados nos servidores e enviados
para os navegadores. Os navegadores armazenam os cookies localmente na máquina do usuá-
rio. Além disso, os navegadores enviam os cookies de volta para o servidor