Buscar

Aula_21 11 18

Prévia do material em texto

Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
1 
Criando a base de dados: 
Relacionamento de cardinalidade "Muitos para muitos" 
 
 
 
Criando as tabelas: 
 
 
 
Usuario 
 IdUsuario Login Senha 
 1 smendes 123 
 2 anapaula 456 
 
UsuarioPerfil 
 
IdUsuario IdPerfil 
Perfil 
 
1 1 
IdPerfil Nome 
 
1 2 
1 Administrador 
 
2 1 
2 Cliente 
 
** Entidade Associativa 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
2 
create table Perfil( 
 IdPerfil integer identity(1,1), 
 Nome nvarchar(25) not null, 
 primary key(IdPerfil)) 
go 
 
create table Usuario( 
 IdUsuario integer identity(1,1), 
 Nome nvarchar(50) not null, 
 Login nvarchar(25) not null unique, 
 Senha nvarchar(100) not null, 
 Foto nvarchar(50) not null unique, 
 DataCadastro datetime not null, 
 primary key(IdUsuario)) 
go 
 
create table UsuarioPerfil( 
 IdUsuario integer not null, 
 IdPerfil integer not null, 
 primary key(IdUsuario, IdPerfil), 
 foreign key(IdUsuario) references Usuario(IdUsuario), 
 foreign key(IdPerfil) references Perfil(IdPerfil)) 
go 
 
Tabelas criadas: 
 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
3 
\Web.config.xml 
Mapeamento da connectionstring do banco de dados: 
 
 
<connectionStrings> 
 
 <add 
 name="aula10" 
 connectionString="Data Source=(LocalDB)\MSSQLLocalDB; 
 AttachDbFilename=C:\Users\COTI\Desktop\Aula_21.11.18\Aula10\ 
 Projeto.Presentation\App_Data\Banco.mdf;Integrated Security=True" 
 /> 
 
 </connectionStrings> 
 
 
----------------------- 
 
Adicionando referencia de System.Configuration 
no projeto Repository: 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
4 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Projeto.Repository.Entities 
{ 
 public class Perfil 
 { 
 //propriedades [prop] + 2x[tab] 
 public int IdPerfil { get; set; } 
 public string Nome { get; set; } 
 
 //Relacionamento de Associação (TER->MUITOS) 
 public List<Usuario> Usuarios { get; set; } 
 
 //sobrescrita do método ToString() 
 public override string ToString() 
 { 
 return $"Id: {IdPerfil}, Nome: {Nome}"; 
 } 
 } 
} 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Projeto.Repository.Entities 
{ 
 public class Usuario 
 { 
 //propriedades [prop] + 2x[tab] 
 public int IdUsuario { get; set; } 
 public string Nome { get; set; } 
 public string Login { get; set; } 
 public string Senha { get; set; } 
 public string Foto { get; set; } 
 public DateTime DataCadastro { get; set; } 
 
 //Relacionamento de Associação (TER->MUITOS) 
 public List<Perfil> Perfis { get; set; } 
 
 //sobrescrita do método ToString() 
 public override string ToString() 
 { 
 return $"Id: {IdUsuario}, Nome: {Nome}, Login: {Login}"; 
 } 
 } 
} 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
5 
Criando a classe para conexão com o banco de dados: 
 
 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.SqlClient; 
using System.Configuration; 
 
namespace Projeto.Repository.Repositories 
{ 
 public class Conexao 
 { 
 //propriedades [prop] + 2x[tab] 
 public SqlConnection Connection { get; set; } 
 public SqlCommand Command { get; set; } 
 public SqlDataReader DataReader { get; set; } 
 public SqlTransaction Transaction { get; set; } 
 
 //métodos.. 
 public void AbrirConexao() 
 { 
 Connection = new SqlConnection(ConfigurationManager 
 .ConnectionStrings["aula10"].ConnectionString); 
 Connection.Open(); 
 } 
 
 public void FecharConexao() 
 { 
 Connection.Close(); 
 } 
 } 
} 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
6 
Criando interfaces para contratos de repositório: 
 
 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Projeto.Repository.Entities; //importando.. 
 
namespace Projeto.Repository.Contracts 
{ 
 public interface IUsuarioRepository 
 { 
 //método abstrato.. 
 void Inserir(Usuario usuario); 
 
 //método abstrato.. 
 Usuario Consultar(string login, string senha); 
 
 //método abstrato.. 
 bool LoginExistente(string login); 
 } 
} 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
 
namespace Projeto.Repository.Contracts 
{ 
 public interface IPerfilRepository 
 { 
 
 } 
} 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
7 
Implementando as interfaces: 
 
 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Projeto.Repository.Entities; 
using Projeto.Repository.Contracts; 
 
namespace Projeto.Repository.Repositories 
{ 
 public class PerfilRepository 
 : Conexao, IPerfilRepository 
 { 
 
 } 
} 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
8 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.SqlClient; //importando.. 
using Projeto.Repository.Entities; //importando.. 
using Projeto.Repository.Contracts; //importando.. 
 
namespace Projeto.Repository.Repositories 
{ 
 public class UsuarioRepository 
 : Conexao, IUsuarioRepository 
 { 
 
 } 
} 
 
Implementando a interface: 
 
 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Data.SqlClient; //importando.. 
using Projeto.Repository.Entities; //importando.. 
using Projeto.Repository.Contracts; //importando.. 
 
namespace Projeto.Repository.Repositories 
{ 
 public class UsuarioRepository 
 : Conexao, IUsuarioRepository 
 { 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
9 
 public void Inserir(Usuario usuario) 
 { 
 string query = "insert into Usuario(Nome, Login, Senha, 
 Foto, DataCadastro) " 
 + "values(@Nome, @Login, @Senha, @Foto, @DataCadastro)"; 
 
 Command = new SqlCommand(query, Connection); 
 Command.Parameters.AddWithValue("@Nome", usuario.Nome); 
 Command.Parameters.AddWithValue("@Login", usuario.Login); 
 Command.Parameters.AddWithValue("@Senha", usuario.Senha); 
 Command.Parameters.AddWithValue("@Foto", usuario.Foto); 
 Command.Parameters.AddWithValue("@DataCadastro", 
 usuario.DataCadastro); 
 Command.ExecuteNonQuery(); 
 } 
 
 public Usuario Consultar(string login, string senha) 
 { 
 string query = "select* from Usuario where Login = @Login 
 and Senha = @Senha"; 
 
 Command = new SqlCommand(query, Connection); 
 Command.Parameters.AddWithValue("@Login", login); 
 Command.Parameters.AddWithValue("@Senha", senha); 
 DataReader = Command.ExecuteReader(); 
 
 //verificar se o usuario foi encontrado.. 
 if(DataReader.Read()) 
 { 
 Usuario usuario = new Usuario(); 
 
 usuario.IdUsuario = Convert.ToInt32(DataReader["IdUsuario"]); 
 usuario.Nome = Convert.ToString(DataReader["Nome"]); 
 usuario.Login = Convert.ToString(DataReader["Login"]); 
 usuario.Senha = Convert.ToString(DataReader["Senha"]); 
 usuario.Foto = Convert.ToString(DataReader["Foto"]); 
 usuario.DataCadastro = Convert.ToDateTime 
 (DataReader["DataCadastro"]); 
 
 return usuario; //retornando o objeto.. 
 } 
 else 
 { 
 return null; //sem espaço de memória.. 
 } 
 } 
 
 public bool LoginExistente(string login) 
 { 
 string query = "select count(Login) from Usuario " 
 + "where Login = @Login"; 
 
 Command = new SqlCommand(query, Connection); 
 Command.Parameters.AddWithValue("@Login", login); 
 int count = Convert.ToInt32(Command.ExecuteScalar()); 
 
 return count > 0; //true, false.. 
 } 
 } 
} 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
10 
Camada de Regras de Negócio: 
 
RN01 - Criar conta de usuário 
 
 Sistema deverá permitir que o usuário crie uma conta de acesso, 
informando seu nome, login, senha e foto. 
 O sistema deverá criptografar a senha informada 
utilizando HASH MD5 
 O sistema não deverá permitir que um usuário crie uma conta de 
acesso com o mesmo login de outro usuário já cadastrado 
 O sistema deverá gravar no banco de dados a data e hora em que o 
cadastro do usuário foi realizado. 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Projeto.Repository.Entities; //importando 
using Projeto.Repository.Repositories; //importando 
using System.Diagnostics; //log no visualstudio 
 
namespace Projeto.Business 
{ 
 public class UsuarioBusiness 
 { 
 public string CriarConta(Usuario usuario) 
 { 
 UsuarioRepository repository = new UsuarioRepository(); 
 
 try 
 { 
 repository.AbrirConexao(); 
 //verificando se o login do usuario ja existe no banco de dados.. 
 if( ! repository.LoginExistente(usuario.Login)) 
 { 
 repository.Inserir(usuario); 
 return $"Usuário {usuario.Nome}, cadastrado com sucesso."; 
 } 
 else 
 { 
 return $"Este login {usuario.Login} 
 já encontra-se cadastrado. Tente outro."; 
 } 
 } 
 catch(Exception e) 
 { 
 Debug.WriteLine(e.Message); 
 return "Erro ao criar conta de usuário."; 
 } 
 finally 
 { 
 repository.FecharConexao(); 
 } 
 } 
 } 
} 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
11 
 
 
MD5 (Message Digest 5) 
 
Algoritmo de encriptação baseado em HASH de 128bits. Qualquer valor 
criptografado em MD5 retorna um HASH com 32 caracteres formados de 16 
algarismos hexadecimais. 
 
Exemplo: 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using System.Security.Cryptography; //importando.. 
 
namespace Projeto.Business.Utils 
{ 
 public class CriptografiaUtil 
 { 
 //algoritmo de criptografia baseado em HASH 
 public static string GetMD5(string valor) 
 { 
 MD5 md5 = new MD5CryptoServiceProvider(); 
 
 //converter o valor recebido para bytes.. 
 byte[] valorEmBytes = Encoding.UTF8.GetBytes(valor); 
 
 //realizando a encriptação.. 
 byte[] resultadoEmBytes = md5.ComputeHash(valorEmBytes); 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
12 
 //retornando o resultado como string.. 
 string saida = string.Empty; 
 
 //percorrendo o resultado da criptografia.. 
 foreach(byte item in resultadoEmBytes) 
 { 
 saida += item.ToString("X2"); //X2 -> HEXADECIMAL 
 } 
 
 return saida; //16 algarismos hexadecimais 
 } 
 } 
} 
 
Voltando para classe de negócio: 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Projeto.Repository.Entities; //importando 
using Projeto.Repository.Repositories; //importando 
using System.Diagnostics; //log no visualstudio 
using Projeto.Business.Utils; //importando 
 
namespace Projeto.Business 
{ 
 public class UsuarioBusiness 
 { 
 public string CriarConta(Usuario usuario) 
 { 
 UsuarioRepository repository = new UsuarioRepository(); 
 
 try 
 { 
 repository.AbrirConexao(); 
 
 //verificando se o login do usuario ja existe no banco de dados.. 
 if( ! repository.LoginExistente(usuario.Login)) 
 { 
 //criptografar a senha.. 
 usuario.Senha = CriptografiaUtil.GetMD5(usuario.Senha); 
 
 repository.Inserir(usuario); 
 return $"Usuário {usuario.Nome}, cadastrado com sucesso."; 
 } 
 else 
 { 
 return $"Este login {usuario.Login} 
 já encontra-se cadastrado. Tente outro."; 
 } 
 } 
 catch(Exception e) 
 { 
 Debug.WriteLine(e.Message); 
 return "Erro ao criar conta de usuário."; 
 } 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
13 
 finally 
 { 
 repository.FecharConexao(); 
 } 
 } 
 } 
} 
 
--------------------------------------------- 
 
Criando uma classe de Modelo (Model) no projeto 
Presentation para realizar o cadastro do usuario: 
 
 
 
HttpPostedFileBase 
Utilizado em Asp.Net MVC para definição 
de campos de upload de arquivos. 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; //validações.. 
 
namespace Projeto.Presentation.Models 
{ 
 public class UsuarioCadastroModel 
 { 
 [MinLength(6, ErrorMessage = "Por favor, informe 
 no mínimo {1} caracteres.")] 
 [MaxLength(50, ErrorMessage = "Por favor, informe 
 no máximo {1} caracteres.")] 
 [Required(ErrorMessage = "Por favor, informe o nome do usuário.")] 
 public string Nome { get; set; } 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
14 
 [MinLength(6, ErrorMessage = "Por favor, informe 
 no mínimo {1} caracteres.")] 
 [MaxLength(20, ErrorMessage = "Por favor, informe 
 no máximo {1} caracteres.")] 
 [Required(ErrorMessage = "Por favor, informe o login do usuário.")] 
 public stringLogin { get; set; } 
 
 [MinLength(8, ErrorMessage = "Por favor, informe 
 no mínimo {1} caracteres.")] 
 [MaxLength(30, ErrorMessage = "Por favor, informe 
 no máximo {1} caracteres.")] 
 [Required(ErrorMessage = "Por favor, informe a senha do usuário.")] 
 public string Senha { get; set; } 
 
 [Compare("Senha", ErrorMessage = "Senhas não conferem.")] 
 [Required(ErrorMessage = "Por favor, confirme sua senha.")] 
 public string SenhaConfirmacao { get; set; } 
 
 [Required(ErrorMessage = "Por favor, envie a foto do usuário.")] 
 public HttpPostedFileBase Foto { get; set; } 
 } 
} 
 
Criando a página de cadastro de usuário: 
/Usuario/Cadastro 
 
 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
15 
Criando o formulário: 
 
@model Projeto.Presentation.Models.UsuarioCadastroModel 
 
@{ 
 ViewBag.Title = "Cadastro"; 
 Layout = "~/Views/Shared/Layout.cshtml"; 
} 
 
<h4>Criar Conta de Usuário</h4> 
<a href="/Home/Index">Voltar para a página inicial</a> 
<br /> 
<br /> 
 
<!-- INICIO DO FORMULARIO --> 
@using (Html.BeginForm("CadastrarUsuario", "Usuario", FormMethod.Post)) 
{ 
 <label>Informe seu Nome:</label> 
 @Html.TextBoxFor(model => model.Nome, 
 new 
 { 
 @class = "form-control col-md-3", 
 @placeholder = "Digite aqui" 
 }) 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.Nome) 
 </span> 
 <br /> 
 
 <label>Informe seu Login:</label> 
 @Html.TextBoxFor(model => model.Login, 
 new 
 { 
 @class = "form-control col-md-3", 
 @placeholder = "Digite aqui" 
 }) 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.Login) 
 </span> 
 <br /> 
 
 <label>Informe sua Senha:</label> 
 @Html.PasswordFor(model => model.Senha, 
 new 
 { 
 @class = "form-control col-md-3", 
 @placeholder = "Digite aqui" 
 }) 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.Senha) 
 </span> 
 <br /> 
 
 <label>Confirme sua Senha:</label> 
 @Html.PasswordFor(model => model.SenhaConfirmacao, 
 new 
 { 
 @class = "form-control col-md-3", 
 @placeholder = "Digite aqui" 
 }) 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
16 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.SenhaConfirmacao) 
 </span> 
 <br /> 
 
 <label>Envie sua Foto:</label> 
 <input type="file" name="Foto" class="form-control col-md-3"/> 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.Foto) 
 </span> 
 <br/> 
 
 <input type="submit" class="btn btn-success" 
 value="Cadastrar Usuário" /> 
 <br /> 
 <br /> 
 
 <h5>@ViewBag.Resultado</h5> 
} 
<!-- FIM DO FORMULARIO --> 
 
 
Resultado: 
 
 
 
Todo formulário criado em HTML que contem campos de upload 
(type="file") precisam de uma configuração no cabeçalho do formulario 
chamada: 
 
enctype="multipart/form-data" 
https://www.w3schools.com/tags/att_form_enctype.asp 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
17 
Configurando o formulário para upload de arquivos: 
 
@model Projeto.Presentation.Models.UsuarioCadastroModel 
 
@{ 
 ViewBag.Title = "Cadastro"; 
 Layout = "~/Views/Shared/Layout.cshtml"; 
} 
 
<h4>Criar Conta de Usuário</h4> 
<a href="/Home/Index">Voltar para a página inicial</a> 
<br /> 
<br /> 
 
<!-- INICIO DO FORMULARIO --> 
@using (Html.BeginForm("CadastrarUsuario", 
 "Usuario", FormMethod.Post, 
 new { @enctype = "multipart/form-data" 
})) 
{ 
 <label>Informe seu Nome:</label> 
 @Html.TextBoxFor(model => model.Nome, 
 new 
 { 
 @class = "form-control col-md-3", 
 @placeholder = "Digite aqui" 
 }) 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.Nome) 
 </span> 
 <br /> 
 
 <label>Informe seu Login:</label> 
 @Html.TextBoxFor(model => model.Login, 
 new 
 { 
 @class = "form-control col-md-3", 
 @placeholder = "Digite aqui" 
 }) 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.Login) 
 </span> 
 <br /> 
 
 <label>Informe sua Senha:</label> 
 @Html.PasswordFor(model => model.Senha, 
 new 
 { 
 @class = "form-control col-md-3", 
 @placeholder = "Digite aqui" 
 }) 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.Senha) 
 </span> 
 <br /> 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
18 
 <label>Confirme sua Senha:</label> 
 @Html.PasswordFor(model => model.SenhaConfirmacao, 
 new 
 { 
 @class = "form-control col-md-3", 
 @placeholder = "Digite aqui" 
 }) 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.SenhaConfirmacao) 
 </span> 
 <br /> 
 
 <label>Envie sua Foto:</label> 
 <input type="file" name="Foto" class="form-control col-md-3"/> 
 <span class="text-danger"> 
 @Html.ValidationMessageFor(model => model.Foto) 
 </span> 
 <br/> 
 
 <input type="submit" class="btn btn-success" 
 value="Cadastrar Usuário" /> 
 <br /> 
 <br /> 
 
 <h5>@ViewBag.Resultado</h5> 
} 
<!-- FIM DO FORMULARIO --> 
 
Criando o método "CadastrarUsuario" 
na classe /UsuarioController.cs 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Projeto.Presentation.Models; 
 
namespace Projeto.Presentation.Controllers 
{ 
 public class UsuarioController : Controller 
 { 
 // GET: Usuario/Autenticacao 
 public ActionResult Autenticacao() 
 { 
 return View(); 
 } 
 
 // GET: Usuario/Cadastro 
 public ActionResult Cadastro() 
 { 
 return View(); 
 } 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
19 
 [HttpPost] 
 public ActionResult AutenticarUsuario(UsuarioAutenticacaoModel model) 
 { 
 //verificar se os campos da model passaram nas validações.. 
 if(ModelState.IsValid) 
 { 
 //teste nos valores do login e da senha 
 if(model.Login.Equals("admin") && model.Senha.Equals("admin")) 
 { 
 ViewBag.Resultado = "Usuário Autenticado!"; 
 } 
 else 
 { 
 ViewBag.Resultado = "Acesso Negado. Usuário inválido."; 
 } 
 } 
 
 return View("Autenticacao"); 
 } 
 
 [HttpPost] 
 public ActionResult CadastrarUsuario(UsuarioCadastroModel model) 
 { 
 //verificando se os campos passaram nas regras de validação.. 
 if(ModelState.IsValid) 
 { 
 
 } 
 
 //retornar para a página de cadastro.. 
 return View("Cadastro"); //nome da view.. 
 } 
 } 
} 
 
Executando: 
Visualizando as mensagens de erro de validação para cada campo 
 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
20 
Criando uma validação 
customizadaem Asp.Net MVC 
 
 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; 
 
namespace Projeto.Presentation.Validations 
{ 
 public class ConterCaracterEspecial 
 : ValidationAttribute 
 { 
 //sobrescrever o método 
 public override bool IsValid(object value) 
 { 
 //transformar o valor recebido para string.. 
 if(value != null) 
 { 
 string valor = value.ToString(); 
 
 return valor.Contains("@") 
 || valor.Contains("$") 
 || valor.Contains("&"); 
 } 
 
 return false; 
 } 
 } 
} 
 
 
 
 
 
 
Treinamento em C# WebDeveloper 
 
Aula 
10 
Segunda-feira, 19 de Novembro de 2018 
 
 
Desenvolvimento Web com Asp.Net MVC 
 
 
21 
Aplicando o validador: 
 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.ComponentModel.DataAnnotations; //validações.. 
using Projeto.Presentation.Validations; //importando.. 
 
namespace Projeto.Presentation.Models 
{ 
 public class UsuarioCadastroModel 
 { 
 [MinLength(6, ErrorMessage = "Por favor, informe 
 no mínimo {1} caracteres.")] 
 [MaxLength(50, ErrorMessage = "Por favor, informe 
 no máximo {1} caracteres.")] 
 [Required(ErrorMessage = "Por favor, informe o nome do usuário.")] 
 public string Nome { get; set; } 
 
 [MinLength(6, ErrorMessage = "Por favor, informe 
 no mínimo {1} caracteres.")] 
 [MaxLength(20, ErrorMessage = "Por favor, informe 
 no máximo {1} caracteres.")] 
 [Required(ErrorMessage = "Por favor, informe o login do usuário.")] 
 public string Login { get; set; } 
 
 [ConterCaracterEspecial(ErrorMessage = "Por favor, informe 
 pelo menos 1 caracter especial.")] 
 [MinLength(8, ErrorMessage = "Por favor, informe 
 no mínimo {1} caracteres.")] 
 [MaxLength(30, ErrorMessage = "Por favor, informe 
 no máximo {1} caracteres.")] 
 [Required(ErrorMessage = "Por favor, informe a senha do usuário.")] 
 public string Senha { get; set; } 
 
 [Compare("Senha", ErrorMessage = "Senhas não conferem.")] 
 [Required(ErrorMessage = "Por favor, confirme sua senha.")] 
 public string SenhaConfirmacao { get; set; } 
 
 [Required(ErrorMessage = "Por favor, envie a foto do usuário.")] 
 public HttpPostedFileBase Foto { get; set; } 
 } 
}

Continue navegando