2010-05-19 2 views
23

Я выборка записей для пользователя, основанных на его UserId как JsonResult ...Как перенаправить на действие контроллера из метода JSONResult в 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"); 
    } 
} 

Как перенаправить к действию контроллера из метода JsonResult в ASP.NET MVC? Любое предложение ...

EDIT: Это не похоже на работу ...

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. Если это так, вы не можете перенаправить действие контроллера. Вам нужно будет сделать это в обратном вызове success сценария AJAX. Один из способов добиться этого заключается в следующем:

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() ... –

+1

'redirectUrl' не существует в текущем контексте ... –

+0

Я постоянно переадресую с AJAX, но при использовании опубликованных полей полей формы, а не при использовании JSON. На самом деле, я пытаюсь отслеживать ошибку, включающую перенаправление с данными JSON, опубликованными прямо сейчас: http://stackoverflow.com/questions/4110889/asp-net-mvc-2-losing-authorization-when-redirecttoaction- с-json-data. Кажется, это не то, что я могу сделать тогда, да? – kdawg

0

нет способов сделать это, клиент выполняет сценарий AJAX, так не будет в состоянии т o обрабатывать что-нибудь еще.

Предлагаю вам перенаправить в клиентский скрипт на основе возвращаемых данных в функции обратного вызова.

Посмотрите на аналогичный вопрос здесь: http://bytes.com/topic/javascript/answers/533023-ajax-redirect

2

Что вы думаете о попытке позвонить:

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

вместо того, чтобы использовать переадресовывает?

3

Добавление к ответу Дарина Димитрова. Для 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; 
          } 
         }, 
Смежные вопросы