Umleitung zu einer anderen Seite in ASP.NET MVC mit JavaScript/jQuery

Lesezeit: 4 Minuten

Ich möchte in ASP.NET MVC 3.0 mit JavaScript/jQuery/Ajax von einer Seite auf eine andere Seite umleiten. Auf Schaltflächenklickereignis habe ich JavaScript-Code wie unten geschrieben.

function foo(id)
{
    $.post("https://stackoverflow.com/Branch/Details/" + id);
}

Mein Controller-Code ist wie folgt:

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

Wenn ich auf eine Schaltfläche klicke, wird die Details-Aktion in BranchController aufgerufen, aber es kehrt nicht zur Detailansicht zurück.

Ich habe keine Fehler oder Ausnahmen erhalten. Es zeigt den Status 200 OK an Feuerwanze. Was ist in meinem Code falsch und wie kann ich auf die Detailansichtsseite umleiten?

Benutzer-Avatar
Darin Dimitrow

Sie abonnieren keinen Erfolgsrückruf in Ihrem $.post AJAX-Aufruf. Das bedeutet, dass die Anfrage ausgeführt wird, Sie aber nichts mit den Ergebnissen tun. Wenn Sie mit den Ergebnissen etwas Nützliches anfangen möchten, versuchen Sie Folgendes:

$.post("https://stackoverflow.com/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
});

Wenn Sie hingegen umleiten möchten, benötigen Sie AJAX absolut nicht. Sie verwenden AJAX nur, wenn Sie auf derselben Seite bleiben und nur einen Teil davon aktualisieren möchten.

Wenn Sie also nur den Browser umleiten wollten:

function foo(id) {
    window.location.href="https://stackoverflow.com/Branch/Details/" + id;
}

Als Randbemerkung: Sie sollten solche URLs niemals fest codieren. Beim Umgang mit URLs in einer ASP.NET MVC-Anwendung sollten Sie immer URL-Hilfsprogramme verwenden. So:

function foo(id) {
    var url="https://stackoverflow.com/questions/8148632/@Url.Action("Details", "Branch", new { id = "__id__" })";
    window.location.href = url.replace('__id__', id);
}

  • Danke @Darin. Ich verwende den URL-Helfer, wie Sie vorgeschlagen haben, aber es ist ein Fehler auf der Seite, weil die URL so etwas ist lokaler Host/… So erhalten Sie die richtige URL von diesem Helfer.

    Benutzer946393

    16. November 2011 um 8:40 Uhr

  • @Sharad, ist das in einer separaten Javascript-Datei? Wenn dies der Fall ist, können Sie darin keine URL-Helfer verwenden. Du könntest definieren url als globale Variable in Ihrer Ansicht: <script type="text/javascript">var url = '@Url.Action("Details", "Branch", new { id = "__id__" })';</script>. Und dann können Sie es in Ihrer separaten Javascript-Datei verwenden.

    – Darin Dimitrow

    16. November 2011 um 8:42 Uhr


  • Ja, das ist in einer separaten JS-Datei. Ich habe es auf der Masterseite platziert und jetzt funktioniert es. Vielen Dank @darin.

    Benutzer946393

    16. November 2011 um 8:49 Uhr


  • Führt eine windows.location.href kein GET durch? Wenn ja, versucht die ursprüngliche Frage, einen POST zu machen. Ich bin überrascht, dass dies als beantwortet markiert wurde, da zwischen den beiden ein großer Unterschied besteht.

    – Segel-Judo

    15. Juni 2015 um 3:20 Uhr

  • Wie verwende ich den letzten Ansatz bei mehreren Parametern?

    – Sribin

    2. Mai 2018 um 4:42 Uhr


Benutzer-Avatar
Mridul

Dies könnte durch die Verwendung einer verborgenen Variablen in der Ansicht und dann die Verwendung dieser Variablen zum Posten aus dem JavaScript-Code erfolgen.

Hier ist mein Code in der Ansicht

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

Jetzt können Sie dies in der JavaScript-Datei verwenden als:

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

Es funktionierte wie ein Zauber von mir. Ich hoffe es hilft dir auch.

  • Für meine Situation ist diese Antwort überlegen, weil ich den Primärschlüssel aus dem Modell (dh Model.WorkFlowID) holen wollte, um ihn in die Umleitung aufzunehmen. So: @Html.Hidden(“RedirectTo”,Url.Action(“ActionName”,”ControllerName”, Model.WorkFlowID));

    – Glen Garson

    24. April 2015 um 17:25 Uhr

  • vielmehr: @Html.Hidden(“RedirectTo”,Url.Action(“Edit”,”WorkFlows”,new { id = Model.WorkFlowID }));

    – Glen Garson

    24. April 2015 um 17:41 Uhr

  • Das hat mir sehr geholfen! Vielen Dank!!! Ich habe versucht, eine modale Ansicht zu verwenden, um Seiten in MVC umzuleiten, und hatte Probleme. Bin dankbar.

    – Domshyra

    28. Februar 2017 um 20:08 Uhr

  • Dies funktioniert für mich (ASP.NET MVC). window.location.href nicht

    – ronIT

    4. Februar 2020 um 4:00 Uhr

Benutzer-Avatar
Lauf

Sie können Folgendes verwenden:

window.location.href="https://stackoverflow.com/Branch/Details/" + id;

Aber Ihr Ajax-Code ist unvollständig ohne Erfolgs- oder Fehlerfunktionen.

Benutzer-Avatar
Mike Braun

// 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>

<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="https://stackoverflow.com/questions/8148632/@Url.Action("Login", "Login")";
            window.location.href = url;
        }
        return bResponse;
    }

</script>

Benutzer-Avatar
getigert

Überprüfen Sie den folgenden Code. Dies wird für Sie hilfreich sein:

<script type="text/javascript">
  window.opener.location.href="https://stackoverflow.com/questions/8148632/@Url.Action("Action", "EventstController")", window.close();
</script>

1097900cookie-checkUmleitung zu einer anderen Seite in ASP.NET MVC mit JavaScript/jQuery

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy