2017-04-26 36 views
0

我的影片所使用的所有观点,即职位,以SignIn()_Layout.cshtml局部视图内的AJAX功能。如果登录失败,它应该重定向到SignInFailed(),并简单地返回视图。相反,在返回视图后,它将重定向回原始视图。ASP.NET MVC预防措施重定向与AJAX

我没有收到任何类型的异常或错误,将阻止其留在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); 
         } 
        } 
}); 

为什么重定向回到原来的看法时,有没有指示这样做,我能做些什么来防止这种行为?

+3

它不是_redirecting回到原来的view_。它的ajax调用和ajax调用永远不会重定向 - 你永远不会离开页面。阿贾克斯的整个观点是保持在我看到的@StephenMuecke的同一页 –

+0

。即使我将操作设置为'''返回RedirectToAction''',它仍然保持在同一页面上? – Sicypher

+2

是的。 (这是ajax的全部目的) –

回答

1

正如斯蒂芬·马克说,在我的问题的意见,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); 
         } 
        } 
});