1

jquery ajaxを使用してビューモデルと別のパラメータをアクションメソッドに渡すにはどうすればよいですか?

私が今していることでは、アクションメソッドは呼び出されていません。原因はおそらく、jquery ajax 呼び出しのデータ オブジェクトでパラメーターが正しく渡されていないためだと思います。

jQuery ajax:

$('#form-login').submit(function (event) {
                event.preventDefault();

                $.ajax({
                    url: "/Account/LogOn/",
                    data: $('#form-login').serialize(),
                    contentType: 'application/json; charset=utf-8',
                    success: function (data) {
                        if (data.userAuthenticated) {
                            window.location.href = data.url;
                        } else {
                            formBlock.clearMessages();
                            displayError($('#errorcred').val());
                        }
                    },
                    error: function () {
                        formBlock.clearMessages();
                        displayError($('#errorserver').val());
                    }
                });
        });

アクション メソッド (ビュー モデルと別のパラメーターを受け入れる):

[HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        // Validate the email and password
        if (ModelState.IsValid)
        {
            if (MembershipService.ValidateUser(model.UserName, model.Password))
            {
                FormsService.SignIn(model.UserName, model.RememberMe);
                if (Url.IsLocalUrl(returnUrl))
                {
                    if (Request.IsAjaxRequest())
                    {
                        return Json(new { userAuthenticated = true, url = returnUrl, isRedirect = true });
                    }
                    else
                    {
                        return Redirect(returnUrl);
                    }
                }
                else
                {
                    if (Request.IsAjaxRequest())
                    {
                        return Json(new { userAuthenticated = true, url = Url.Action("Index", "Home"), isRedirect = true });
                    }
                    else
                    {
                        return RedirectToAction("Index", "Home");
                    }
                }
            } 
        }
        else
        {
            if (Request.IsAjaxRequest())
            {
                return Json(new { userAuthenticated = false, url = Url.Action("LogOn", "Account") });
            }
            else
            {
                ModelState.AddModelError("", adm.ErrorUserNamePassword);
            }
        }

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

2 に答える 2

0

$.ajax 呼び出しから以下を削除します。

contentType: 'application/json; charset=utf-8',

application/jsonエンコーディングを指定しましたが、$('#form-login').serialize()関数はapplication/x-www-form-urlencodedコンテンツを送信しています。

returnUrl パラメーターの送信に関する限り、存在する必要があるフォームから単純に読み取ることができます(ヘルパーactionを使用した場合)。Html.BeginForm()

$.ajax({
    url: this.action,
    ...
});

eventまた、これは JavaScript の予約語であるため、おそらく変数の名前を別の名前に変更することをお勧めします。

$('#form-login').submit(function (e) {
    e.preventDefault();

    ...
});
于 2013-07-07T14:33:42.587 に答える