25

我正在根据用户UserId的 JsonResult 获取用户的记录...

public JsonResult GetClients(int currentPage, int pageSize)
{
   if (Session["UserId"] != "")
   {
      var clients = clirep.FindAllClients().AsQueryable();
      var count = clients.Count();
      var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
      var genericResult = new { Count = count, Results = results };
      return Json(genericResult);
   }
   else
   {
         //return RedirectToAction("Index","Home");
   }
}

如何从 asp.net mvc 中的 JsonResult 方法重定向到控制器操作?任何建议...

编辑: 这似乎不起作用......

if (Session["UserId"] != "")
            {
                var clients = clirep.FindAllClients().AsQueryable();
                var count = clients.Count();
                var results = new PagedList<ClientBO>(clients, currentPage - 1, pageSize);
                var genericResult = new { Count = count, Results = results ,isRedirect=false};
                return Json(genericResult);
            }
            else
            {
                return Json({redirectUrl = Url.Action("Index", "Home"), isRedirect = true });
            }
4

5 回答 5

61

这将取决于您如何调用此控制器操作。当您使用 JSON 时,我想您是在 AJAX 中调用它。如果是这种情况,您无法从控制器操作重定向。您需要在successAJAX 脚本的回调中执行此操作。实现它的一种方法如下:

return Json(new 
{ 
    redirectUrl = Url.Action("Index", "Home"), 
    isRedirect = true 
});

在成功回调中:

success: function(json) {
    if (json.isRedirect) {
        window.location.href = json.redirectUrl;
    }
}

备注:确保包含isRedirect = false在 JSON 中,以防您不想重定向,这是控制器操作中的第一种情况。

于 2010-05-19T11:24:04.730 回答
3

添加到 Darin Dimitrov 的回答中。对于 C#.NET MVC - 如果您想重定向到不同的页面/控制器并将对象/模型发送到新控制器,您可以执行类似的操作。

在 JsonResult 方法中(在控制器中):

 ErrorModel e = new ErrorModel();
            e.ErrorTitle = "Error";
            e.ErrorHeading = "Oops ! Something went wrong.";
            e.ErrorMessage = "Unable to open Something";



return Json(new 
{ 
    redirectUrl = Url.Action("Index", "Home",e), 
    isRedirect = true 
});

在成功回调中:

success: function(json) {
    if (json.isRedirect) {
        window.location.href = json.redirectUrl;
    }
}

如果新控制器可以接受如下模型/对象..您可以将对象传递给新控制器/页面

    public ActionResult Index(ErrorModel e)
    {
        return View(e);
    }

希望这可以帮助。

于 2013-05-02T20:59:38.940 回答
2

你怎么想尝试打电话:

return (new YourOtherController()).JSONResultAction();

而不是使用重定向?

于 2011-09-27T08:02:23.560 回答
1

如果您与区域合作...

控制器:

return Json(new
        {
            redirectUrl = Url.Action("Index", "/DisparadorProgSaude/", new { area = "AreaComum" }),
            isRedirect = true
        });

看法:

success: function (json) {

                           if (json.isRedirect) {
                           window.location.href = json.redirectUrl;
                           }
                        },
于 2016-11-08T16:43:39.080 回答
0

没办法做到这一点,客户端正在执行 AJAX 脚本,因此将无法处理其他任何事情。

我建议您根据回调函数中返回的数据在客户端脚本中重定向。

在这里看看一个类似的问题:http: //bytes.com/topic/javascript/answers/533023-ajax-redirect

于 2010-05-19T11:23:10.497 回答