Nehmen wir an, ich habe eine Controlleraktion, die ein Element aus dem Einkaufskorb eines Benutzers löscht. Diese Controller-Aktion wird ausgelöst, indem ein POST für die URL ~/delete/{id} ausgeführt wird. Wenn ich mehrere Seiten in meiner Anwendung habe, die auf diese URL posten, wie konstruiere ich die Controller-Aktion, um zurück zu der Seite zu gelangen, die dorthin gepostet wurde?Wie leiten Sie die aufrufende Seite in ASP.NET MVC um?
Antwort
Ich habe es noch nie ausprobiert, aber Sie können den Referer-Header verwenden, um zu wissen, woher der Post oder get kommt, und versuchen, die URL mit einer Route abzugleichen.
Sie sollten auf der Buchungsseite einen RedirectToUrl-Parameter angeben.
Es ist keine gute Praxis, sich auf Referrer-Header zu verlassen.
Stattdessen etwas tun, wie folgt aus:
public ActionResult Delete(int id, string RedirectToUrl)
{
// check if RedirectToUrl is null or empty and redirect accordingly
}
Auf der Buchungsansicht oder Teilansicht der Parameter auf verschiedene Weise zur Verfügung stellen kann:
<%= Html.Hidden("RedirecToUrl","/my/lovely/url") %>
oder
<form action="/item/delete/22?RedirectToUrl=/my/lovely/url">
I würde die erste Option bevorzugen.
Die erste Sache, die ich tun würde, ist Ajax.ActionLink, dann, wenn der Benutzer Javascript aktiviert hat, würden Sie nie wirklich die Seite verlassen. Dies ist die beste Lösung. Wenn Sie keine Verknüpfung möchten, können Sie auch eine Ajax-Form haben. Beide könnten die DELETE- oder POST-Methode verwenden.
Um den Fall zu behandeln, in dem Javascript deaktiviert ist, wenn Sie im Controller erkennen, dass der POST nicht mit Ajax durchgeführt wurde (Request.IsAjaxRequest ist false), können Sie die Request.UrlReferrer-Eigenschaft abrufen Url der verweisenden Seite. Wenn dies nicht null ist, können Sie ein RedirectResult verwenden, um zu dieser Seite zurückzukehren. Wenn es null ist, wählen Sie eine Standardzielseite - wahrscheinlich so etwas wie "Ihr Artikel wurde entfernt, klicken Sie hier, um mit dem Einkauf fortzufahren." Letzteres wird wahrscheinlich nur selten getroffen.
Verwenden Sie einfach den Header URL Referer [sic].
var requestFrom = Request.UrlReferrer
Sie in der Dokumentation finden: Das ist würde http://msdn.microsoft.com/en-us/library/system.web.httprequest.urlreferrer.aspx
die einzige Zeit nicht arbeiten, wenn die Seite direkt angefordert wird, aber in diesem Fall würden Sie nicht an jedem Ort zu sowieso umleiten .
Es gibt auch die Möglichkeit, mit AJAX nur async zu machen, so dass Ihre Delete-Aktion nur das tut, was sie beschreibt, und nicht verantwortlich ist, etwas außerhalb ihres beabsichtigten Löschzwecks zu tun.
Wenn Sie WCSF (Web Client Software Factory) zum Implementieren von MVC-Mustern verwenden, können Sie mit PageFlow die gesamte Navigation ausführen.
ZB: -
PageFlow.Next(); oder PageFlow.Bisherige();
Das ist, was ich tue:
public ActionResult ResendActivationEmail()
{
// Do other things here
return new RedirectResult(Request.UrlReferrer.AbsoluteUri);
}
- 1. So leiten Sie die Seite bei fehlgeschlagener Anmeldung um
- 2. So leiten Sie die Seite bei Klickereignis der Schaltfläche um
- 3. So leiten Sie die Seite auf eine andere Seite in ASP.NET mit Authentication
- 4. So leiten Sie die Branch-Wartung um
- 5. So leiten Sie die login.aspx-Seite von Global.asax um, wenn die Sitzung beendet wird
- 6. Wie Sie URLs mit Baumstruktur mit ASP.NET Routing leiten?
- 7. Aktualisieren asp.net mvc Seite
- 8. Wie wird die aktuelle Seite in ASP.NET MVC visuell angezeigt?
- 9. wie Action verwenden, um eine andere Seite asp.net MVC
- 10. Rendern Sie die Ansicht als String, und leiten Sie sie um
- 11. Asp.Net MVC Die vorherige Seite finden
- 12. Stark typisierte viewdata übergeben, um Seite in asp.net-mvc anzuzeigen
- 13. Wie schließen Sie eine ASP.NET MVC-Seite vom Controller?
- 14. So validieren Sie Anmeldeinformationen in MVC und leiten Sie zur falschen Anmeldeseite um
- 15. Wie implementieren Sie Paging in ASP.NET MVC?
- 16. Seite Generation Zeit - ASP.Net MVC
- 17. ASP.NET MVC wie Link implementieren, die zur vorherigen Seite zurückkehrt?
- 18. Wie leiten Sie eine ASP.NET MVC-Route zu einer statischen Datei?
- 19. Wie füge ich zusätzliche Felder hinzu, um die Seite in asp.net mvc zu registrieren?
- 20. So leiten Sie meine gelöschten Links um
- 21. So leiten Sie Ihre Schaltfläche "Zur App" um, um Benutzer auf Ihre Website zu leiten
- 22. Wie Verwenden von ASP.Net MVC View in WebForms ASPX-Seite?
- 23. So leiten Sie die vom Suchformular generierte Symboldurl mithilfe von .htaccess in die ursprüngliche URL um
- 24. Wie leiten Sie die Antwort von der Anfrage in Express.js?
- 25. So leiten Sie Benutzer zur Anmeldeseite um, wenn der Benutzer direkt auf eine Seite in ASP.NET WebForms zugreift
- 26. ASP.NET MVC in eine WebForms-Seite einfügen
- 27. Wie leiten Sie auf eine externe Website mit Rails um?
- 28. Sitzungsende in ASP.net MVC
- 29. asp.net MVC, wie umregistrierte Benutzer, die kein Profil auf Seite haben?
- 30. Leiten Sie jede Seite mit einer ASPX-Endung in eine neue URL um.
Die meisten Statistik-Systeme stützen sich auf den Referer-Header zu wissen, wo die Anfrage kommt. Es ist nicht zuverlässig, aber wenn ich wählen muss, jeden Link in einer Website zu ändern und im Referer-Header auf Redirect zu setzen, wähle ich den letzten oder mache einen Ajax-Actionlink, wie tvafosson es vorschlägt. –
Ja, es ist immer ein Kompromiss. Das Ändern jedes Links in einer Website klingt für mich allerdings nach schlechtem Design. Wenn Sie Ihre Controller testen, ist der Redirect-Parameter auch einfacher zu testen. –
Dies ist es, was wir tun, aber ich rate dringend, die übergebene Weiterleitungs-URL zu "desinfizieren" und sie zu ignorieren, wenn sie nicht Teil Ihrer Website ist. Dies gilt auch für Referrer-Header. –