2010-05-19 31 views
23

hồ sơ Tôi lấy cho một người sử dụng dựa trên UserId của mình như là một JsonResult ...Làm thế nào để chuyển hướng đến một hành động điều khiển từ một phương thức JSONResult trong ASP.NET MVC?

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

Làm thế nào để chuyển hướng đến một hành động điều khiển từ một phương pháp JsonResult trong asp.net MVC? Bất kỳ đề nghị ...

EDIT: này dường như không làm việc ...

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

Trả lời

53

này sẽ phụ thuộc vào cách bạn đang gọi hành động điều khiển này. Khi bạn đang sử dụng JSON, tôi cho rằng bạn đang gọi nó trong AJAX. Nếu đây là trường hợp bạn không thể chuyển hướng từ hành động điều khiển. Bạn sẽ cần thực hiện điều này trong lời gọi success của tập lệnh AJAX. Một cách để đạt được điều đó như sau:

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

Và trong khi gọi lại thành công:

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

Chú ý: Hãy chắc chắn bao gồm isRedirect = false trong JSON trong trường hợp bạn không muốn chuyển hướng đó là trường hợp đầu tiên trong hành động điều khiển của bạn.

+0

tôi đang sử dụng jquery.ajax() ... –

+1

'redirectUrl' không tồn tại trong ngữ cảnh hiện tại ... –

+0

Tôi chuyển hướng với AJAX mọi lúc, nhưng khi sử dụng các tuyển tập trường biểu mẫu đã đăng, không phải khi sử dụng JSON. Trong thực tế, tôi đang cố gắng theo dõi một lỗi liên quan đến chuyển hướng với dữ liệu được đăng JSON ngay bây giờ: http://stackoverflow.com/questions/4110889/asp-net-mvc-2-losing-authorization-when-redirecttoaction- with-json-data Nghe có vẻ như đây không phải là thứ tôi có thể làm được, đúng không? – kdawg

0

không có cách nào để làm điều này, khách hàng được thực hiện một kịch bản AJAX như vậy sẽ không thể t o xử lý bất cứ điều gì khác.

Tôi đề nghị bạn chuyển hướng trong tập lệnh khách hàng dựa trên dữ liệu được trả về trong hàm gọi lại.

Hãy nhìn vào một câu hỏi tương tự ở đây: http://bytes.com/topic/javascript/answers/533023-ajax-redirect

2

Phải làm gì bạn nghĩ về cố gắng để gọi:

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

thay vì sử dụng chuyển hướng?

3

Thêm vào câu trả lời của Darin Dimitrov. Đối với C# .NET MVC - Nếu bạn muốn chuyển hướng đến một trang/bộ điều khiển khác và muốn gửi một Object/Model tới bộ điều khiển mới, bạn có thể làm một cái gì đó như thế này.

Trong Phương pháp JsonResult (trong bộ điều khiển):

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

Và trong khi gọi lại thành công:

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

Và nếu bộ điều khiển mới có thể chấp nhận mô hình/đối tượng như dưới đây .. bạn có thể chuyển đối tượng cho bộ điều khiển/trang mới

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

Hy vọng điều này sẽ hữu ích.

1

Và nếu bạn làm việc với các khu vực ...

Bộ điều khiển:

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

Xem:

success: function (json) { 

          if (json.isRedirect) { 
          window.location.href = json.redirectUrl; 
          } 
         }, 
Các vấn đề liên quan