Jak przekierować do akcji kontrolera z metody JSONResult w ASP.NET MVC?
Pobieram rekordy dla użytkownika na podstawie jego UserId
jako 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");
}
}
Jak przekierować do akcji kontrolera z metody JsonResult w asp.net mvc?Wszelkie sugestie...
EDIT: To chyba nie działa...
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 });
}
5 answers
Będzie to zależało od sposobu wywołania tej akcji kontrolera. Jak używasz JSON przypuszczam, że nazywasz go w AJAX. W takim przypadku nie można przekierować z akcji kontrolera. Musisz to zrobić w wywołaniu zwrotnym success
skryptu AJAX. Jednym ze sposobów jej osiągnięcia jest:
return Json(new
{
redirectUrl = Url.Action("Index", "Home"),
isRedirect = true
});
I w sukcesie:
success: function(json) {
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
}
Uwaga: Upewnij się, aby włączyć isRedirect = false
w JSON w przypadku, gdy nie chcesz przekierować, który jest pierwszy przypadek w Twoim działanie kontrolera.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-19 12:11:56
Dodam do odpowiedzi Darina Dimitrowa. Na C#.NET MVC - jeśli chcesz przekierować do innej strony / kontrolera i chcesz wysłać obiekt / Model do nowego kontrolera, możesz zrobić coś takiego.
W metodzie JsonResult (w kontrolerze):
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
});
I w sukcesie:
success: function(json) {
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
}
I jeśli nowy kontroler może zaakceptować model / obiekt jak poniżej.. możesz przekazać obiekt do nowego kontrolera / strony
public ActionResult Index(ErrorModel e)
{
return View(e);
}
Mam nadzieję, że to pomoże.Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-27 21:45:16
Co myślisz o próbie połączenia:
return (new YourOtherController()).JSONResultAction();
Zamiast używać przekierowań?
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-13 09:20:12
I jeśli pracujesz z obszarami ...
Kontroler:
return Json(new
{
redirectUrl = Url.Action("Index", "/DisparadorProgSaude/", new { area = "AreaComum" }),
isRedirect = true
});
Widok:
success: function (json) {
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
},
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-11-08 16:43:39
Nie ma sposobu, aby to zrobić, klient wykonuje skrypt AJAX, więc nie będzie w stanie obsłużyć niczego innego.
Proponuję przekierowanie w skrypcie klienta na podstawie zwróconych danych w funkcji callback.
Spójrz na podobne pytanie tutaj: http://bytes.com/topic/javascript/answers/533023-ajax-redirect
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-05-19 11:23:10