3

我有一个带有以下代码的 Controller 方法:

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) {
        }
    });

在我真正登录之前,我还必须单击我的链接两次,但找不到该页面。

4

1 回答 1

2

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

更新: 您可以对一个请求返回一个响应。要实现您想要的,您有两种选择。首先:返回 json 结果,然后当客户端收到 json 结果并验证它时,您可以向服务器发送另一个请求,然后重定向到另一个页面。或者您可以从客户端重定向,window.location.replace用于通过 js 更改当前页面。此外,您可以在服务器上准备链接以实现所有 .net 路由优势并将其包含到 json 结果中,而不是像这样:

$.ajax {
  ..
  ..
  ..
  success: function(data) {
    alert(data.message_for_user);
    window.location.replace(data.url_to_redirect);
  }
}
于 2013-11-02T21:09:27.830 回答