0

コントローラーの httppost メソッドに投稿する次のコードがあります。

$QuickLoginSubmit.click(function (e) {
        e.preventDefault();
        var LoginModel = {
            'UserName': $QuickEmail.val() == "" ? null : $QuickEmail.val(),
            'Password': $QuickPassword.val() == "" ? null : $QuickPassword.val(),
            'RememberMe': $QuickRemember.val() == "on" ? true : false
        };
        $.ajax({
            url: '/Account/LogOnAjax',
            type: 'POST',
            contentType: 'application/json',
            dataType: 'json',
            data: JSON.stringify(LoginModel),
            success: function (result) {
                if (result == true) {
                    window.location = "/Dashboard";
                } else {
                    $QuickLoginErrors.text(result);
                }
            }
        });
    });

問題は、$QuickEmailまたは$QuickPasswordフィールドに何も入力していない場合、ajax 呼び出しで次のエラーが返されることです。

The view 'LogOnAjax' or its master was not found or no view engine supports the searched locations. The following locations were searched:<br>~/Views/Account/LogOnAjax.aspx<br>~/Views/Account/LogOnAjax.ascx<br>~/Views/Shared/LogOnAjax.aspx<br>~/Views/Shared/LogOnAjax.ascx<br>~/Views/Account/LogOnAjax.cshtml<br>~/Views/Account/LogOnAjax.vbhtml<br>~/Views/Shared/LogOnAjax.cshtml<br>~/Views/Shared/LogOnAjax.vbhtml</i>

しかし、2 つのフィールドが入力されていれば、私の ajax メソッド呼び出しは正常に機能します。これが私のhttppostメソッドです:

[HttpPost]
        public ActionResult LogOnAjax(LogOnModel model)
        {
            if (ModelState.IsValid)
            {
                if (Membership.ValidateUser(model.UserName, model.Password))
                {
                    FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
                    return Json(true);                  
                }
                else
                {
                    return Json("The user name or password provided is incorrect.");
                }
            }

            // If we got this far, something failed, redisplay form
            return View(model);
        }
4

2 に答える 2

2

問題は、アクション コードの最後の行にあります。

実際にはLogOnAjaxという名前のビューはありません。したがって、使用する必要があります

return RedirectToAction(YOUR_LOGON_ACTION_NAME);

またはモデルをフォームに戻すには、次を使用できます

return View(YOUR_LOGON_VIEW_NAME, model);

欲しいものを手に入れるために。

アップデート:

また、すべての場合に json オブジェクトを返す場合は、JsonResultを使用することをお勧めします。

于 2012-08-13T05:00:09.863 に答える
0

「LogOnAjax」と呼ばれる関連するビューがないようです。JSON 応答を期待しているので、できることは return ステートメントを次のように変更することです。

   // If we got this far, something failed, redisplay form
        return Json("Please enter valid username and password");
    }
于 2012-08-13T04:56:31.743 に答える