2010-05-19 83 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; 
          } 
         }, 
相關問題