2014-05-24 121 views
-1

嗨,我有點新MVC和實體框架,所以我想不出如何解決這個問題。我搜查了(相信我)一個awnser,但沒有結果。 我正嘗試使用實體框架登錄我的項目。事情是我補充說:ModelState.IsValid = false MVC 4實體框架

public string Confirmar_contraseña { get; set; }

到「用戶」的模式,以驗證(當你在註冊屏幕)的密碼是否相等

型號:

namespace MundialDeFutbol.Models 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.ComponentModel.DataAnnotations; 
    using DataAnnotationsExtensions; 
    using System.ComponentModel.DataAnnotations.Schema; 

public partial class Usuarios 
{ 
    public int Id { get; set; } 

    [Required(ErrorMessage = "El nick (nombre de usuario) es obligatoio")] 
    [StringLength(15, MinimumLength = 3, ErrorMessage = "El nombre de usuario debe contener entre 3 y 15 caracteres")] 
    public string Nick { get; set; } 

    [Required(ErrorMessage = "La contraseña es obligatoria")] 
    [StringLength(10, MinimumLength = 4, ErrorMessage = "La contraseña debe contener entre 4 y 10 caracteres")] 
    public string Contraseña { get; set; } 

    [NotMapped] 
    [Compare("Contraseña", ErrorMessage = "Las contraseñas no coinciden")] 
    public string Confirmar_contraseña { get; set; } 
    public int Tipo_de_usuario { get; set; } 
    } 
} 

查看:

@using MundialDeFutbol.Models 
@using System.Web.Optimization 
@model Usuarios 

@{ 
    ViewBag.Title = "Login"; 
} 

<h2>Login</h2> 

@using (Html.BeginForm("Login", "Usuarios", FormMethod.Post, new { @class = "form-horizontal", @style = "margin-top: 20px;" })) 
{ 
    @Html.AntiForgeryToken() 
    @Html.ValidationSummary(true) 

    <div class="form-group"> 
     <label for="Nick" class="col-sm-2 control-label">@Html.LabelFor(model => model.Nick)</label> 
     <div class="col-sm-10"> 
      @Html.TextBoxFor(model => model.Nick, new { @class = "form-control", @placeholder = "Nombre de usuario" }) 
      <strong> 
       @Html.ValidationMessageFor(model => model.Nick, null, new { @class = "text-danger", @style = "display: block; margin-top: 10px;" }) 
      </strong> 
     </div> 
    </div> 
    <div class="form-group"> 
     <label for="Contraseña" class="col-sm-2 control-label">@Html.LabelFor(model => model.Contraseña)</label> 
     <div class="col-sm-10"> 
      @Html.TextBoxFor(model => model.Contraseña, new { @class = "form-control", @placeholder = "Escribe contraseña", @type = "password" }) 
      <strong> 
       @Html.ValidationMessageFor(model => model.Contraseña, null, new { @class = "text-danger", @style = "display: block; margin-top: 10px;" }) 
      </strong> 
     </div> 
    </div> 
    <div class="form-group"> 
     <div class="col-sm-offset-2 col-sm-10"> 
      <button type="submit" class="btn btn-default">Enviar</button> 
     </div> 
    </div> 
} 

@section scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

控制器

namespace MundialDeFutbol.Controllers 
{ 
    public class UsuariosController : Controller 
    { 
     // 
     // GET: /Usuarios/ 

     public ActionResult Index() 
     { 
      return View(); 
     } 

     public ActionResult Registrar() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Registrar(Usuarios usuario) 
     { 
      if (ModelState.IsValid) 
      { 
       var ctx = new MundialDBEntities(); 
       ctx.Usuarios.Add(usuario); 
       ctx.SaveChanges(); 
       return RedirectToAction("Index","Home"); 
      } 

      return View(); 
     } 

     public ActionResult Login() 
     { 
      return View(); 
     } 

     [HttpPost] 
     public ActionResult Login(Usuarios usuario) 
     { 
      if (ModelState.IsValid) 
      { 
       FormsAuthentication.SetAuthCookie(usuario.Nick, false); 
       //This needs to be completed I think 
       return RedirectToAction("Index", "Home"); 
      } 

      return View(); 
     } 

    } 
} 

西班牙語中有一些單詞,對不起。重點是我使用「Confirmar_contraseña」作爲數據庫實體模型的輔助屬性,只是爲了確認用戶輸入相同的密碼,但是當我嘗試登錄時,ModelState返回false,我不知道爲什麼。

+0

顯示你的模型,其中的ModelState聲稱是無效的actionmethod。 – CodeCaster

+0

更多代碼請!你只問了半個問題。 '你添加了x來驗證密碼,但是.....' –

+0

Im對此,使用這個編輯器真的很難--- – N3HL

回答

0

要檢查的ModelState錯誤是什麼,加在後操作方法如下,並檢查errors財產

if (!ModelState.IsValid) 
{ 
    var errors = this.ModelState.Keys.SelectMany(key => this.ModelState[key].Errors); 
    .... 
+0

[Errors var](http://puu.sh/8YUPB.png ) 這是從debuggin – N3HL

+0

我得到什麼你需要展開列表,看看他們是什麼 –

+0

[錯誤2](http://puu.sh/8YV78.png) 它說:「密碼不匹配」 ,就像我在mo中使用的DataAnnotation一樣del,但我正在嘗試登錄,而不是註冊我不明白 – N3HL