web-dev-qa-db-de.com

Umleiten auf eine andere Seite in ASP.NET MVC mithilfe von JavaScript/jQuery

Ich möchte in ASP.NET MVC 3.0 von einer Seite zu einer anderen Seite umleiten, indem Sie JavaScript/jQuery/Ajax verwenden. Bei einem Klickereignis habe ich JavaScript-Code wie folgt geschrieben.

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

Mein Controller-Code lautet 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, ruft sie die Details-Aktion in BranchController auf, kehrt jedoch nicht zur Detailansicht zurück.

Ich habe keine Fehler oder Ausnahmen erhalten. Es zeigt den Status 200 OK in Firebug . Was ist falsch in meinem Code und wie kann ich zur Detailansicht weiterleiten?

61
user946393

Sie abonnieren keinen erfolgreichen Rückruf in Ihrem Aufruf $ .post AJAX. Das bedeutet, dass die Anforderung ausgeführt wird, Sie jedoch nichts mit den Ergebnissen tun. Wenn Sie mit den Ergebnissen etwas Nützliches tun möchten, versuchen Sie Folgendes:

$.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
});

Wenn Sie dagegen 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 möchten:

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

Als Randbemerkung: Sie sollten niemals hartcodierende URLs wie diese sein. Sie sollten immer URL-Helfer verwenden, wenn Sie mit URLs in einer ASP.NET-MVC-Anwendung arbeiten. So:

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

Dies kann durch Verwendung einer verborgenen Variablen in der Ansicht und anschließender Verwendung dieser Variablen zum Posten des JavaScript-Codes 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 für mich. Ich hoffe es hilft dir auch.

36
Mridul

Sie können verwenden:

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

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

8
run
// 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>
4
Mike Brown
<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>
1

Überprüfen Sie den Code unten, dies ist hilfreich für Sie:

<script type="text/javascript">
  window.opener.location.href = '@Url.Action("Action", "EventstController")', window.close();
</script>
0
shahwaiz hasan