web-dev-qa-db-fra.com

Comment rediriger vers une action de contrôleur à partir d'une méthode JSONResult dans ASP.NET MVC?

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 });
            }
25
Chendur Pandian

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.

56
Darin Dimitrov

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.

3
bluwater2001

Que pensez-vous d'essayer d'appeler:

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

au lieu d'utiliser des redirections?

2
64X0P

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;
                           }
                        },
1
Mfilho_19

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

0
David Neale