我如何通過視圖模型和其他參數使用jQuery AJAX我的操作方法操作?通行證視圖模型+參數使用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());
}
});
});
Action方法(它接受視圖模型和其他參數) :
[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);
}
但是,如何正確使用$('#form-login')。serialize()來映射參數,因爲我有兩個參數用於action方法? – vobs
'$('#form-login')。serialize()'只會將表單中存在的參數作爲輸入字段。我注意到你有一個'returnUrl'參數。當Forms Authentication模塊重定向到Login頁面時,該參數通常存在於查詢字符串中。如果你使用'@ Html.BeginForm()'輔助器,它將成爲表單'action'屬性的一部分。所以當你使用'url:this.action'而不是像你一樣('url:「/ Account/LogOn /」')對它進行硬編碼時,它會被傳遞給動作。 –
如果您想手動傳遞附加參數,最簡單的方法是在表單中包含隱藏字段,然後在調用$ .ajax方法之前在JavaScript代碼中設置此隱藏字段的值。然後.serialize函數會考慮到它。 –