74 votes

Redirection vers une autre page en ASP.NET MVC à l'aide de JavaScript/jQuery

Je veux rediriger d'une page vers une autre page en ASP.NET MVC 3.0 en utilisant JavaScript/jQuery/Ajax. Lors du clic sur le bouton, j'ai écrit un code JavaScript comme ci-dessous.

function foo(id)
{
    $.post('/Branch/Details/' + id);
}

Le code de mon contrôleur est le suivant :

public ViewResult Details(Guid id)
{
     Branch branch = db.Branches.Single(b => b.Id == id);
     return View(branch);
}

Lorsque je clique sur un bouton, il appelle l'action Détails dans BranchController, mais il ne retourne pas à la vue Détails.

Je n'ai reçu aucune erreur ou exception. Le statut 200 OK est affiché dans Firebug . Qu'est-ce qui ne va pas dans mon code et comment puis-je rediriger vers la page d'affichage des détails ?

160voto

Darin Dimitrov Points 528142

Vous ne souscrivez à aucun callback de succès dans votre appel AJAX $.post. Cela signifie que la requête est exécutée, mais que vous ne faites rien avec les résultats. Si vous voulez faire quelque chose d'utile avec les résultats, essayez :

$.post('/Branch/Details/' + id, function(result) {
    // Do something with the result like for example inject it into
    // some placeholder and update the DOM.
    // This obviously assumes that your controller action returns
    // a partial view otherwise you will break your markup
});

Par contre, si vous voulez rediriger, vous n'avez absolument pas besoin d'AJAX. Vous utilisez AJAX uniquement lorsque vous souhaitez rester sur la même page et n'en mettre à jour qu'une partie.

Donc si vous vouliez seulement rediriger le navigateur :

function foo(id) {
    window.location.href = '/Branch/Details/' + id;
}

A titre d'information : Vous ne devriez jamais coder en dur des urls comme ça. Vous devez toujours utiliser les url helpers lorsque vous traitez des urls dans une application ASP.NET MVC. Donc :

function foo(id) {
    var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';
    window.location.href = url.replace('__id__', id);
}

1 votes

Merci @Darin. J'utilise l'aide d'url comme vous l'avez suggéré mais il y a une erreur sur la page parce que l'url est quelque chose comme ceci localhost/ Comment obtenir une Url correcte à partir de cette aide.

9 votes

@Sharad, est-ce que c'est dans un fichier javascript séparé ? Si c'est le cas, vous ne pouvez pas utiliser les url helpers dans ce fichier. Vous pouvez définir url comme une variable globale dans votre vue : <script type="text/javascript">var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';</script> . Et ensuite vous pouvez l'utiliser dans votre fichier javascript séparé.

1 votes

Oui, c'est dans un fichier JS séparé. Je l'ai placé dans la page principale et maintenant ça fonctionne. Merci beaucoup @Darin.

45voto

Mridul Points 171

Cela peut se faire en utilisant une variable cachée dans la vue, puis en utilisant cette variable pour afficher à partir du code JavaScript.

Voici mon code dans la vue

@Html.Hidden("RedirectTo", Url.Action("ActionName", "ControllerName"));

Maintenant vous pouvez utiliser ceci dans le fichier JavaScript comme :

 var url = $("#RedirectTo").val();
 location.href = url;

Ça a marché comme un charme pour moi. J'espère que cela vous aidera aussi.

0 votes

Pour ma situation, cette réponse est supérieure, car je voulais récupérer la clé primaire du modèle (i.e. Model.WorkFlowID) pour l'inclure dans la redirection. Comme ceci @Html.Hidden("RedirectTo",Url.Action("ActionName", "ControllerName", Model.WorkFlowID)) ;

1 votes

Plutôt : @Html.Hidden("RedirectTo",Url.Action("Edit", "WorkFlows",new { id = Model.WorkFlowID })) ;

0 votes

Cela m'a beaucoup aidé ! Merci ! !! J'essayais d'utiliser une vue modale pour rediriger des pages en MVC, et j'avais du mal. J'apprécie.

9voto

run Points 853

Vous pouvez utiliser :

window.location.href = '/Branch/Details/' + id;

Mais votre code Ajax est incomplet sans fonctions de succès ou d'erreur.

5voto

Mike Brown Points 41
// in the HTML code I used some razor
@Html.Hidden("RedirectTo", Url.Action("Action", "Controller"));

// now down in the script I do this
<script type="text/javascript">

var url = $("#RedirectTo").val();

$(document).ready(function () {
    $.ajax({
        dataType: 'json',
        type: 'POST',
        url: '/Controller/Action',
        success: function (result) {
            if (result.UserFriendlyErrMsg === 'Some Message') {
                // display a prompt
                alert("Message: " + result.UserFriendlyErrMsg);
                // redirect us to the new page
                location.href = url;
            }
            $('#friendlyMsg').html(result.UserFriendlyErrMsg);
        }
    });
</script>

2voto

Muhammad Mubashir Points 530
<script type="text/javascript">
    function lnkLogout_Confirm()
    {
        var bResponse = confirm('Are you sure you want to exit?');

        if (bResponse === true) {
            ////console.log("lnkLogout_Confirm clciked.");
            var url = '@Url.Action("Login", "Login")';
            window.location.href = url;
        }
        return bResponse;
    }

</script>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X