2010-05-19 134 views
23

的用户,我获取记录基于作为JsonResult他UserId ......如何从ASP.NET MVC中的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 }); 
      } 

回答

53

这将取决于你如何调用这个控制器动作。正如你使用JSON,我想你是在AJAX中调用它。如果是这种情况,您不能从控制器操作重定向。您需要在AJAX脚本的success回调中执行此操作。实现这一目标的方法之一是:

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

而在成功回调:

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

注:确保包括isRedirect = false在JSON的情况下,你不想重定向这是控制器操作中的第一个案例。

+0

我使用jQuery的。ajax()... – 2010-05-19 11:26:37

+1

'redirectUrl'在当前上下文中不存在... – 2010-05-19 11:35:16

+0

我一直使用AJAX重定向,但在使用张贴表单字段集合时,而不是在使用JSON时。事实上,我试图追查一个涉及重定向与JSON发布数据的错误现在:http://stackoverflow.com/questions/4110889/asp-net-mvc-2-losing-authorization-when-redirecttoaction- with-json-data听起来这不是我能做的事情,是吗? – kdawg 2010-11-08 21:28:51

2

做什么你想想试图拨打:

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

,而不是使用重定向?

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

希望这有助于。

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; 
          } 
         }, 
相关问题