locked
EntityValidationErrors no campo senha RRS feed

  • Pergunta

  • olá

    esta acontecendo um erro na hora de criar um usuario estou usando vs10+mvc3+ef

    o erro é: Exception Details: System.Data.Entity.Validation.DbEntityValidationException: Validation failed for one or more entities. See 'EntityValidationErrors' property for more details.

    acontece somente na validção da senha e da confirmação de senha se eu tiro funciona normalmente abaixo o codigo:

    <span>//Usuarios.cs
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.ComponentModel.DataAnnotations;
    using System.Globalization;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Security;
    
    namespace gastomvc3.Models
    {
      
      public class TblUsuarios
      {
          public	int Id           { get; set; }
    	    public	string nome         { get; set; }
          public	string email        { get; set; }
          public int tblpermissoesId     { get; set; }
    	    public	string endereco       { get; set; }
    	    public	int numero         { get; set; }
    	    public	string complemento     { get; set; }
    	    public	DateTime nascimento     { get; set; }
    	    public	string estado        { get; set; }
    	    public	string cidade        { get; set; }
    
          [Required]
          [DataType(DataType.Password)]
          [Display(Name = "Senha")]
          public string senha { get; set; }
    
          [DataType(DataType.Password)]
          [Display(Name = "Redigite sua senha")]
          [Compare("senha", ErrorMessage = "as senhas estao diferentes.")]
          public string confirmaSenha { get; set; }
    
          public int status { get; set; }
          public int plano { get; set; }
    	    public DateTime cadastrado     { get; set; }
          public TblPermissoes TblPermissoes { get; set; }
      }
    
      
    }
    
    //CadastroController.cs
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using gastomvc3.Models;
    
    namespace gastomvc3.Controllers
    {
      public class CadastroController : Controller
      {
        // GET: /Cadastro/
    
        GastosEntities usuarioContext = new GastosEntities();
    
        public ActionResult Index()
        {
          return View();
        }
    
        // GET: /Cadastro/Cadastrar
    
        public ActionResult Cadastrar()
        {
          return View();
        }
    
        // POST: /Cadastro/Cadastrar
    
        [HttpPost]
        public ActionResult Cadastrar(TblUsuarios modelo)
        {
          if (ModelState.IsValid)
          {
    
            usuarioContext.tblusuarios.Add(modelo);
            usuarioContext.SaveChanges();
            return RedirectToAction("Gastos/Index");
    
          }
          ModelState.AddModelError("", "erro internno tente novamente");
          return View(modelo);
        }
    
      }
    }
    
    //View cadastro.cshtml
    @model gastomvc3.Models.TblUsuarios
    
    @{
      ViewBag.Title = "Cadastrar";
    }
    
    <h2>Cadastrar</h2>
    
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
    
    @using (Html.BeginForm()) {
      @Html.ValidationSummary(true)
      <fieldset>
        <legend>TblUsuarios</legend>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.nome)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.nome)
          @Html.ValidationMessageFor(model => model.nome)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.email)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.email)
          @Html.ValidationMessageFor(model => model.email)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.tblpermissoesId)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.tblpermissoesId)
          @Html.ValidationMessageFor(model => model.tblpermissoesId)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.endereco)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.endereco)
          @Html.ValidationMessageFor(model => model.endereco)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.numero)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.numero)
          @Html.ValidationMessageFor(model => model.numero)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.complemento)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.complemento)
          @Html.ValidationMessageFor(model => model.complemento)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.nascimento)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.nascimento)
          @Html.ValidationMessageFor(model => model.nascimento)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.estado)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.estado)
          @Html.ValidationMessageFor(model => model.estado)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.cidade)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.cidade)
          @Html.ValidationMessageFor(model => model.cidade)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.senha)
        </div>
        <div class="editor-field">
          @Html.PasswordFor(model => model.senha)
          @Html.ValidationMessageFor(model => model.senha)
        </div>
    
       
       <div class="editor-label">
          @Html.LabelFor(model => model.confirmaSenha)
        </div>
        <div class="editor-field">
          @Html.PasswordFor(model => model.confirmaSenha)
          @Html.ValidationMessageFor(model => model.confirmaSenha)
        </div>
    
    
        <div class="editor-label">
          @Html.LabelFor(model => model.status)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.status)
          @Html.ValidationMessageFor(model => model.status)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.plano)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.plano)
          @Html.ValidationMessageFor(model => model.plano)
        </div>
    
        <div class="editor-label">
          @Html.LabelFor(model => model.cadastrado)
        </div>
        <div class="editor-field">
          @Html.EditorFor(model => model.cadastrado)
          @Html.ValidationMessageFor(model => model.cadastrado)
        </div>
    
        <p>
          <input type="submit" value="Create" />
        </p>
      </fieldset>
    }
    
    <div>
      @Html.ActionLink("Back to List", "Index")
    </div>
    
    
    </span>
    
    

    bom e isso e aproveitando gostaria de saber o seguinte depois de cadastrar o meu usuario na hora de editar eu quero remover alguns campos por exemplo:Senha so q ai ele diz que o modelo esta invalido, como eu faço?

     

    Obrigado a todos

    terça-feira, 1 de fevereiro de 2011 16:56

Todas as Respostas

  • Consegui resolver o 1 erro

    o problema era o seguinte, na hora em que eu dava um savechanges() o modelo tinha o atributo confirmaSenha so que esse confirma senha nao existe no meu banco de dados ai dava erro de validação. pra resolver isso coloquei isso na classe tblusuarios

        [NotMapped] //<------- COLOQUEI ISSO AQUI
        [DataType(DataType.Password)]
        [Compare("senha", ErrorMessage = "As duas senhas nao conferem!")]
        [Display(Name = "Redigite sua senha.")]
        public string confirmaSenha { get; set; }
    

    ai ele validou certo e funcionou agora a segunda duvida eu nao consegui resolver ainda

    como remover campos da minha view e nao dar erro ao gravar os dados.

    obrigado pela ajuda

    terça-feira, 1 de fevereiro de 2011 18:23
  • Olá tfmels,

     

    Você pode receber em seu método POST um Formcollection de sua página, assim mesmo que não envie todos os campos da tabela é possível atualiza-la sem problemas. 

     

    Outra forma, menos "certa" podemos dizer, seria você esconder seu campo na página. Se estiver utilizando jQuery pode fazer da seguinte forma:

     

    $('#nomeDoCampo').hide();

     

    Abs,

     

    Rafael Zaccanini

    quarta-feira, 2 de fevereiro de 2011 12:08