Как перенаправить на действие контроллера из метода JSONResult в ASP.NET MVC?

Я извлекаю записи для пользователя на основе его 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");
   }
}

Как перенаправить действие контроллера из метода 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 });
            }

person ACP    schedule 19.05.2010    source источник


Ответы (5)


Это будет зависеть от того, как вы вызываете это действие контроллера. Поскольку вы используете 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, если вы не хотите перенаправлять, что является первым случаем в вашем действии контроллера.

person Darin Dimitrov    schedule 19.05.2010
comment
Я все время перенаправляю с помощью AJAX, но при использовании коллекций полей опубликованной формы, а не при использовании JSON. На самом деле, я прямо сейчас пытаюсь отследить ошибку, связанную с перенаправлением данных, отправленных в формате JSON: stackoverflow.com/questions/4110889/ Похоже, это не то, что я могу сделать тогда да? - person kdawg; 09.11.2010
comment
Привет Дарин, Спасибо за ваш ответ, уже проголосовал за вас. Мое сообщение может быть слишком длинным, но я хотел знать, есть ли способ, которым в случае успеха перенаправление должно выполняться контроллером MVC, а не из пользовательского интерфейса. - person Navin Pandit; 24.06.2018

Добавление к ответу Дарина Димитрова. Для 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);
    }

Надеюсь это поможет.

person bluwater2001    schedule 02.05.2013

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

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

вместо использования редиректов?

person 64X0P    schedule 27.09.2011

А если работать с областями...

Контроллер:

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

Вид:

success: function (json) {

                           if (json.isRedirect) {
                           window.location.href = json.redirectUrl;
                           }
                        },
person Mfilho_19    schedule 08.11.2016

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

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

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

person David Neale    schedule 19.05.2010