Как перенаправить на действие контроллера из метода 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 });
}
Ответы
Ответ 1
Это будет зависеть от того, как вы вызываете это действие контроллера. Поскольку вы используете JSON, я предполагаю, что вы вызываете его в AJAX. Если это так, вы не можете перенаправить действие контроллера. Вам нужно будет сделать это в обратном вызове success
AJAX script. Один из способов достижения этого - следующее:
return Json(new
{
redirectUrl = Url.Action("Index", "Home"),
isRedirect = true
});
И в обратном вызове успеха:
success: function(json) {
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
}
Примечание. Обязательно включите isRedirect = false
в JSON, если вы не хотите перенаправлять, что является первым случаем в действии вашего контроллера.
Ответ 2
Добавляя к Дарину Димитрову ответ. Для С#.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);
}
Надеюсь, что это поможет.
Ответ 3
Что вы думаете о попытке позвонить:
return (new YourOtherController()).JSONResultAction();
вместо использования перенаправления?
Ответ 4
И если вы работаете с областями...
Контроллер:
return Json(new
{
redirectUrl = Url.Action("Index", "/DisparadorProgSaude/", new { area = "AreaComum" }),
isRedirect = true
});
Вид:
success: function (json) {
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
},
Ответ 5
Невозможно сделать это, клиент выполняет AJAX script, поэтому не сможет справиться с чем-либо еще.
Я предлагаю вам перенаправить в клиентский script на основе возвращенных данных в функции обратного вызова.
Взгляните на аналогичный вопрос: http://bytes.com/topic/javascript/answers/533023-ajax-redirect