Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Email já cadastrado no banco de dados

Preciso cadastrar um email, porem não pode ser repetido ou seja email deve ser unico. Gostaria de alertar o usuario pelo :

@Html.ValidationMessageFor(model => model.Email, "", new { @class = "text-danger" })

Seria possivel? Existe algum attributte que permita fazer essa verificação?

Se não, qual seria a melhor forma de fazer?

2 respostas
solução!

A melhor maneira seria fazer uma verificação no seu controller.

Realmente Luis, tentei usar um compare no model, porem quando temos que alterar um dado daquele cliente, começa a surgir outros problemas

A ideia era

    [Required]
        [Compare("EmailBanco", ErrorMessage="Email já cadastrado")]
        [EmailAddress(ErrorMessage = "Email incorreto")]
        public string Email { get; set; }

    [NotMapped]
        public string EmailBanco {
            get {
                DContext db = new DContext();
                if(db.Usuarios.FirstOrDefault(x => x.Email == this.Email) == null)
                {
                    return Email;
                }
                else
                {
                    return "";
                }
            }

A solução

if (db.Usuarios.FirstOrDefault(x=>x.Email == usuario.Email) != null)
            {
                ModelState.AddModelError("usuario.Email", "Email já cadastrado");
            }

e na View

 @Html.ValidationMessage("usuario.Email", new { @class = "text-danger" })