Je cherche des enregistrements pour un utilisateur en fonction de sa UserId
en tant que 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");
}
}
Comment rediriger vers une action de contrôleur à partir d'une méthode JsonResult dans asp.net mvc? Toute suggestion ...
EDIT: Cela ne semble pas fonctionner ...
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 });
}
Cela dépend de la manière dont vous appelez cette action du contrôleur. Comme vous utilisez JSON, je suppose que vous l’appelez en AJAX. Si tel est le cas, vous ne pouvez pas rediriger l'action du contrôleur. Vous devrez le faire dans le callback success
du script AJAX. Une façon d'y parvenir est la suivante:
return Json(new
{
redirectUrl = Url.Action("Index", "Home"),
isRedirect = true
});
Et dans le rappel de succès:
success: function(json) {
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
}
Remarque: Assurez-vous d'inclure isRedirect = false
dans le JSON au cas où vous ne voudriez pas rediriger ce qui est le premier cas dans l'action de votre contrôleur.
Ajoutant à la réponse de Darin Dimitrov. Pour C # .NET MVC - Si vous souhaitez rediriger vers une autre page/contrôleur et que vous souhaitez envoyer un objet/modèle au nouveau contrôleur, vous pouvez procéder de la sorte.
Dans la méthode JsonResult (dans le contrôleur):
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
});
Et dans le rappel de succès:
success: function(json) {
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
}
Et si le nouveau contrôleur peut accepter le modèle/objet comme ci-dessous .. vous pouvez passer l'objet au nouveau contrôleur/page
public ActionResult Index(ErrorModel e)
{
return View(e);
}
J'espère que cela t'aides.
Que pensez-vous d'essayer d'appeler:
return (new YourOtherController()).JSONResultAction();
au lieu d'utiliser des redirections?
Et si vous travaillez avec des zones ...
Manette:
return Json(new
{
redirectUrl = Url.Action("Index", "/DisparadorProgSaude/", new { area = "AreaComum" }),
isRedirect = true
});
Vue:
success: function (json) {
if (json.isRedirect) {
window.location.href = json.redirectUrl;
}
},
Pas moyen de faire cela, le client exécute un script AJAX et ne pourra donc plus rien gérer.
Je vous suggère de rediriger dans le script client en fonction des données renvoyées dans la fonction de rappel.
Jetez un oeil à une question similaire ici: http://bytes.com/topic/javascript/answers/533023-ajax-redirect