【问题标题】:ModelState.IsValid always false in asp.net mvc 2在 asp.net mvc 2 中 ModelState.IsValid 始终为假
【发布时间】:2012-07-20 21:03:16
【问题描述】:

我尝试在我的项目中填写登录表单。

这是我的控制器:

 public ActionResult Index()
 {
    return View();
 }
 [HttpPost] 
 public ActionResult Index(UserModels model)
 {
     if (ModelState.IsValid)
     {
        if (model.IsValid(model.UserName, model.Password))
        {
          FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
          return RedirectToAction("Introduction", "Home");
        }
        else
        {
          ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }
    }
    return View(model);
 }

这是我的模型:

 [Required(ErrorMessage = "*")]
 public string UserName { get; set; }
 [Required(ErrorMessage = "*")]
 public string Password { get; set; }
 [Display(Name = "Remember me?")]
 public bool RememberMe { get; set; }

 public bool IsValid(string _username, string _pwd)
 {
    EMP context = new EMP();
    var _userLogin = from u in context.tblEmployees
                     where u.UserName == _username &&
                     u.Password == _pwd
                     select u;
   if (_userLogin != null)
   {
      return true;
   }
   else
   {
      return false;
   }
 }

这是我的观点:

<div>
  <% using (Html.BeginForm()) { %>
    <div style="position:relative; top:302px; vertical-align:middle;">
      <%: Html.TextBoxFor(m => m.UserName, new { @id = "txtUsername", size = "25" })%>
      <%: Html.ValidationMessageFor(m => m.UserName)%>
    </div>

    <div>
      <%: Html.PasswordFor(m => m.Password, new { @id = "txtPassword", size = "25" })%>
      <%: Html.ValidationMessageFor(m => m.Password) %>
    </div>

    <div>
      <input id="btnLogin" type="submit" value="LOGIN" />
    </div>
    <div style="position:relative; top:415px; vertical-align:middle;">
      <%: Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")%>
    </div>
   <% } %>
</div>

但是当我在我的视图中输入了有效的用户名和密码,然后按下按钮提交,调试ModelState.IsValid总是假的。

有人对这个问题有任何想法吗?请分享。

谢谢。

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-2


    【解决方案1】:

    不确定您的错误的原因是什么。但是在这种情况下,为了调试,我编写了一个ELSE 部分并通过检查ViewData.ModelState.Values 集合来检查模型错误是什么。

    if (ModelState.IsValid)
    {    
       //Do whatever you want with the valid Model    
    }
    else
    {
        // Let's inspect what error message it is
       foreach (var modelStateValue in ViewData.ModelState.Values)
       {         {
          foreach (var error in modelStateValue.Errors)
          {
             //Use breakpoints and Let's check what it is in these properties
              var errorMessage = error.ErrorMessage;
              var exception = error.Exception;
          }
       }
    }
    

    【讨论】:

    • 我试过这个,然后我得到了errorMessage = "*"exception = null
    • 将模型属性的 ErrorMessage 值更改为一些独特的字符串(例如:请输入用户名)并查看 errorMesage 变量中的内容。
    • 当我分配errorMessage="Enter user name" 时,errorMessage 等于我分配的字符串。
    • 这意味着您没有从表单中填写该值。
    • 不是Shyju,我输入了两个文本框。
    【解决方案2】:

    是您手动设置了 tetbox 的 ID 吗?

    TextBoxFor rendering to HTML with prefix on the ID attribute

    <%: Html.TextBoxFor(m => m.UserName, new { @id = "txtUsername", size = "25" })%>
    

    尝试不使用“@id = “txtUsername””。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多