244 pág.

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