2013-11-02 43 views
3

我有一个控制器方法用下面的代码:RedirectToAction显示在页面上404,但仍然重定向

ClearAuthenticationCookies(); 
FormsAuthentication.SetAuthCookie(EmailAddress, false); 

RedirectToAction("Index", "Home"); 

var responseObject = new responseObject 
{ 
    responseCode = "2", 
    responseMessage = "No" 
}; 
return Json(new {responseObject = responseObject}); 

这是从通过AJAX另一个网站执行,但不会显示在浏览器中正确的URL。如果我直接登录,它的工作原理:

$.ajax({ 
     type: "POST", 
     url: "http://localhost:51437/UserAccount/SignOn2", 
     dataType: 'json', 
     data: jsonData, 
     crossDomain: true, 
     success: function(result) { 
     }, 
     error: function(result) { 
     } 
    }); 

我也有两次单击我的链接,它实际上登录我面前,但页面没有找到。

回答

2

您的控制器签名应该是public RedirectResult SignOn(...)return RedirectToAction("Index", "Home");是您应该从控制器返回的对象。此后不要返回任何JsonResult

更新: 您可以通过一个请求返回一个响应。 要实现你想要的,你有两个选择。首先:返回json结果,然后当客户端接收到json结果并验证它时,您可以向服务器发送另一个请求,然后重定向到另一个页面。或者你可以从客户端重定向,使用window.location.replace通过js更改当前页面。 Furthemore,你可以在服务器上准备的链接,以实现所有.NET优势航线,包括它的JSON结果,比让这样的事情:

$.ajax { 
    .. 
    .. 
    .. 
    success: function(data) { 
    alert(data.message_for_user); 
    window.location.replace(data.url_to_redirect); 
    } 
} 
+0

好吧,我会当我有机会尝试这一点,但什么如果我想重定向用户,还要返回一个JsonResult。我怎样才能做到这一点? – xaisoft

+0

请不要忘记标记为正确答案:) – AuthorProxy

+0

谢谢,我与此同时,但是当我返回成功时,我打开一个窗口与URL而不是做替换。我唯一担心的是弹出式窗口拦截器会发生什么? – xaisoft

相关问题