我的_Layout.cshtml
部分视图中有一个AJAX函数,该帖子被发布到SignIn()
的所有视图使用。如果登录失败,则应该重定向到SignInFailed()
并返回视图。相反,在返回视图后,它将重定向回原始视图。
我没有收到任何会阻止它留在SignInFailed()
的例外或错误。
这是我的AJAX:
$.ajax({
type: "POST",
traditional: true,
url: "@Url.Action("SignIn", "Home")",
data: { user: name, password: code, pageName: urlPage },
success: function () {
///do stuff
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
if (debug) {
alert(XMLHttpRequest.responseText);
alert(textStatus);
alert(errorThrown);
}
}
});
为什么在没有指令的情况下重定向回原始视图,我该怎么做才能防止这种行为?
答案 0 :(得分:1)
正如Stephen Muecke在我的问题评论中所说,AJAX旨在发布和获取数据而无需刷新或重定向页面;因此,为什么我以前的方法不起作用。我没有尝试在后端重定向,而是从后端返回JSON,让前端知道登录是否成功。然后,根据结果,我使用JavaScript重定向或刷新。
我更改了SignIn()
操作以返回JSON:
public ActionResult SignIn(string user, string password)
{
//Some database stuff validating username and password
if (loginSuccessful)
{
return Json(new { status = "success" });
}
else
{
return Json(new { status = "failure", redirectUrl = "/Home/SignInFailed" });
}
}
我将我的AJAX改为:
$.ajax({
type: "POST",
traditional: true,
url: "@Url.Action("SignIn", "Home")",
data: { user: name, password: code },
success: function (result) {
if (result.status == "success") {
location.reload();
}
else {
location.href = result.redirectUrl;
}
},
error: function (XMLHttpRequest, textStatus, errorThrown) {
if (debug) {
alert(XMLHttpRequest.responseText);
alert(textStatus);
alert(errorThrown);
}
}
});