小编典典

ASP.NET MVC 4中的jQuery Ajax调用后的服务器端重定向

ajax

我将登录信息从jQuery AJAX调用发送到MVC 4控制器:

   $.post(url, data, function (response) {
      if (response=='InvalidLogin') {
          //show invalid login
      }
      else if (response == 'Error') {
          //show error
      }
      else {
          //redirecting to main page from here for the time being.
          window.location.replace("http://localhost:1378/Dashboard/Index");
      }
   });

如果登录成功,我想根据用户类型将用户从服务器端重定向到适当的页面。如果登录失败,则会将字符串发送回用户:

    [HttpPost]
    public ActionResult Index(LoginModel loginData)
    {
        if (login fails)
        {
            return Json("InvalidLogin", JsonRequestBehavior.AllowGet);
        }
        else
        {
             // I want to redirect to another controller, view, or action depending
             // on user type.
        }
    }

但是有问题:

  1. 如果此方法返回“ ActionResult”,那么我将收到错误消息not all code paths return a value

  2. 如果我使用“ void”,则无法返回任何内容。

  3. 即使我使用“ void”且没有返回值,由于jQuery AJAX调用的异步特性,我也无法重定向到其他控制器或视图。

有什么技术可以处理这种情况?


阅读 308

收藏
2020-07-26

共1个答案

小编典典

return通常从方法返回而无需执行任何其他语句,因此else不需要。这样,您将摆脱问题#1。

至于重定向,为什么不返回某种 重定向 命令:

[HttpPost]
public ActionResult Index(LoginModel loginData)
{
    if (login fails)
    {
        return Json(new {result = "InvalidLogin"}, JsonRequestBehavior.AllowGet);
    }
    return Json(new {result = "Redirect", url = Url.Action("MyAction", "MyController")});
}

然后在javascript中:

$.post(url, data, function (response) {
  if (response.result == 'InvalidLogin') {
      //show invalid login
  }
  else if (response.result == 'Error') {
      //show error
  }
  else if (response.result == 'Redirect'){
      //redirecting to main page from here for the time being.
      window.location = response.url;
  }
 });
2020-07-26