Inquiridor
EntityValidationErrors no campo senha

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,
quarta-feira, 2 de fevereiro de 2011 12:08