1

プロジェクトでログインフォームを実行しようとしました。

これが私のコントローラーです:

 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 になります。

誰でもこの問題について何か考えがありますか? 共有してください。

ありがとう。

4

2 に答える 2

3

あなたのエラーの理由は何ですか。しかし、そのようなシナリオでは、デバッグのために私は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;
      }
   }
}
于 2012-07-22T15:32:14.727 に答える
1

tetbox の ID を手動で設定したからですか?

TextBoxID 属性にプレフィックスを付けて HTML にレンダリングする場合

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

「@id = "txtUsername"」なしで試してください。

于 2012-07-25T09:34:38.460 に答える