ModelState.IsValid在asp.net mvc中始终为false 2

问题描述:

我试图在我的项目中执行登录表单。ModelState.IsValid在asp.net mvc中始终为false 2

这里是我的控制器:

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始终为false。

任何人有任何关于这个问题的想法?请分享。

谢谢。

不知道你错误的原因是什么。但在这种情况下,为了调试,我编写了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; 
     } 
    } 
} 
+0

我试过了,然后得到了'errorMessage =“*”'和'exception = null'。 – Nothing 2012-07-23 01:15:47

+0

将模型属性的ErrorMessage值更改为某个不明确的字符串(例如:输入UserName)并查看errorMesage变量中的内容。 – Shyju 2012-07-23 01:20:00

+0

当我分配'errorMessage =“输入用户名”'“,那么'errorMessage'就等于我分配的字符串。 – Nothing 2012-07-23 06:27:22

是从您手动设置tetboxes的ID?

TextBoxFor rendering to HTML with prefix on the ID attribute

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

尝试没有 “@id = ”txtUsername“”。