web-dev-qa-db-fra.com

Comment rediriger à l'action de la méthode JavaScript?

J'ai un type d'entrée = "bouton"

<input type="button" name="DeleteJob" runat="server" value="Löschen" onclick="DeleteJob()" />

et méthode JavaScript:

function DeleteJob() {

    if (confirm("Do you really want to delete selected job/s?"))
        return true;
    else
        return false;
}

Comment puis-je plutôt renvoyer true, rediriger vers Action DeleteJob?

[HttpGet]
public ActionResult DeleteJob(string selectedObject)
{
    return View();
}
35
r.r

Pour rediriger:

function DeleteJob() {
    if (confirm("Do you really want to delete selected job/s?"))
        window.location.href = "your/url";
    else
        return false;
}
33
Peter Porfy
function DeleteJob() {
    if (confirm("Do you really want to delete selected job/s?"))
        window.location.href = "/{controller}/{action}/{params}";
    else
        return false;
}
32
yojimbo87

J'aimerais pouvoir commenter la réponse de yojimbo87, mais je n'ai pas encore assez de réputation pour commenter. Il a été souligné que ce chemin relatif ne fonctionne que depuis la racine:

        window.location.href = "/{controller}/{action}/{params}";

Je voulais juste confirmer que vous pouvez utiliser @ Url.Content pour fournir le chemin absolu:

function DeleteJob() {
    if (confirm("Do you really want to delete selected job/s?"))
        window.location.href = '@Url.Content("~/{controller}/{action}/{params}")';
    else
        return false;
}
13
RJB

Peut-être mieux faire une ancre avec l'URL DeleteJob au lieu de bouton?

<a href="<%=Url.Action("DeleteJob", "YourController", new {selectedObject="someObject"})%>" onclick="return DeleteJob()">Löschen</a>

et utilisez votre javascript que vous avez déjà écrit:

function DeleteJob() {

        if (confirm("Do you really want to delete selected job/s?"))
            return true;
        else
            return false;
    }

Donc, si la fonction retourne à true, vous serez redirigé. Si la fonction renvoie false, vous restez toujours sur la page.

10
wassertim

Utilisez la méthode @ Url.Action. Cela fonctionnera et déterminera le bon itinéraire, quel que soit le serveur IIS sur lequel vous déployez.

Exemple - Window.location.href = "@ Url.Action (" Action "," Contrôleur ")";

ainsi, dans le cas de l'action Index sur le contrôleur Accueil - window.location.href = "@ Url.Action (" Index "," Home ")";

5
Chris M.

J'ai eu quelques difficultés avec cela parce que je voulais utiliser Knockout pour lier le bouton à l'événement click. Voici mon bouton et la fonction correspondante à l'intérieur de mon modèle de vue.

<a class="btn btn-secondary showBusy" data-bind="click: back">Back to Dashboard</a>

var vm = function () {
...
    self.back = function() {
        window.location.href = '@Url.Action("LicenseDashboard", "Application")';
    }
}
2
Jim Sims

Vous pouvez envoyer une demande Ajax au serveur ou utiliser window.location à cette URL.

1
Fourj

(C'est plus un commentaire que je ne peux pas commenter à cause de la mauvaise réputation, cela pourrait être utile)

Si vous vous trouvez dans sth.com/product et que vous souhaitez rediriger vos messages vers sth.com/product/index use

window.location.href = "index";

Si vous souhaitez rediriger vers sth.com/home

window.location.href = "/home";

et si vous voulez, vous voulez rediriger vers sth.com/home/index

window.location.href = "/home/index";
0
Krisi Suci