In ASP.NET-Anwendungen gibt es viele Möglichkeiten, zwischen Webformularen zu navigieren: mithilfe von Hyperlinks, mithilfe von Response.Redirect, mithilfe von Server.Transfer oder mithilfe von Server.Execute. In diesem Artikel werden die Gemeinsamkeiten, Unterschiede sowie Vor- und Nachteile dieser vier Navigationsmethoden analysiert, um Ihnen bei der Auswahl der besten Navigationsmethode zu helfen.
1. Hyperlink
Die einfachste Möglichkeit, von einem Formular aus ein anderes Formular einzugeben, ist die Verwendung des HTML-Hyperlink-Steuerelements. Verwenden Sie in einem Webformular die HTML-Codeklasse von Hyperlinks wie:
<a href="WebForm2.aspx">Enter Form 2</a>
Wenn der Benutzer auf den Hyperlink klickt, wird WebForm2.aspx ausgeführt und das Ergebnis an gesendet der Browser. Die Hyperlink-Navigation kann fast überall verwendet werden, einschließlich HTML-Seiten und gewöhnlichen ASP-Seiten. ASP.NET bietet auch eine weitere alternative Methode, die HyperLink-Serversteuerung:
<form id="Form1" method="post" runat="server">
<asp:HyperLink id="HyperLink1" runat=" server"
NavigateUrl="WebForm2 .aspx">Enter Form 2</asp:HyperLink>
</form>
Das Ausführungsergebnis des obigen HTML-Codes ist dasselbe wie im ersten Beispiel, da ASP.NET das HyperLink-Webserversteuerelement als HTML-Super-Link-Steuerelement behandelt. Es gibt jedoch einen wichtigen Unterschied zwischen den beiden. HyperLink-Webserver-Steuerelemente können serverseitig programmiert werden. Insbesondere kann seine NavigateUrl-Eigenschaft im Programmcode geändert werden, was die Erstellung von Hyperlinks ermöglicht, deren spezifische Ziele sich basierend auf dem aktuellen Status der Anwendung dynamisch ändern können, zum Beispiel:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
HyperLink1.NavigateUrl = "WebForm3.aspx"
End Sub
Nachdem dieser Code ausgeführt wurde und der Benutzer auf den Link klickt, wird ihm WebForm3.aspx anstelle von WebForm2.aspx angezeigt.
2. Verwenden Sie ein Programm, um die Umleitung zu steuern.
Obwohl Hyperlinks von einer Seite zur anderen navigieren können, wird diese Navigationsmethode vollständig vom Benutzer gesteuert. Manchmal müssen wir möglicherweise Code verwenden, um den gesamten Navigationsprozess zu steuern, einschließlich des Wechsels zu einer anderen Seite. In diesen Situationen bietet ASP.NET drei verschiedene Möglichkeiten, ähnliche Zwecke zu erreichen: Aufrufen der Redirect-Methode des Response-Objekts und Aufrufen der Transfer- oder Execute-Methode des Server-Objekts. Das Verhalten dieser drei Navigationsmethoden ist grundsätzlich ähnlich, es gibt jedoch Unterschiede.
2.1 Response.Redirect
Die Response.Redirect-Methode veranlasst den Browser, eine Verknüpfung zu einer angegebenen URL herzustellen. Wenn die Response.Redirect()-Methode aufgerufen wird, erstellt sie eine Antwort mit dem Statuscode 302 (der angibt, dass sich das Ziel geändert hat) und der neuen Ziel-URL in den Antwortheadern. Der Browser empfängt die Antwort vom Server und verwendet die Informationen im Antwortheader, um eine Anfrage für die neue URL zu stellen.
Das heißt, bei Verwendung der Response.Redirect-Methode erfolgt der Umleitungsvorgang auf der Clientseite und umfasst insgesamt zwei Kommunikationen mit dem Server (zwei Roundtrips): Die erste ist eine Anfrage für die Originalseite, die eine erhält 302-Antwort und das zweite Mal besteht darin, die in der 302-Antwort deklarierte neue Seite anzufordern und die Seite nach der Umleitung abzurufen.
2.2 Server.Transfer
Die Methode Server.Transfer überträgt den Ausführungsfluss von der aktuellen ASPX-Datei auf eine andere ASPX-Seite auf demselben Server. Wenn Server.Transfer aufgerufen wird, wird die Ausführung der aktuellen ASPX-Seite beendet und der Ausführungsfluss auf eine andere ASPX-Seite übertragen, aber die neue ASPX-Seite verwendet weiterhin den von der vorherigen ASPX-Seite erstellten Antwortstream.
Wenn Sie die Server.Transfer-Methode zum Navigieren zwischen Seiten verwenden, ändert sich die URL im Browser nicht, da die Umleitung vollständig serverseitig durchgeführt wird und der Browser nicht weiß, dass der Server einen Seitenwechsel durchgeführt hat.
Standardmäßig übergibt die Server.Transfer-Methode keine Formulardaten oder Abfragezeichenfolgen von einer Seite an eine andere, aber solange der zweite Parameter der Methode auf True gesetzt ist, können die Formulardaten der ersten Seite beibehalten und abgefragt werden Zeichenfolge.
Gleichzeitig ist bei der Verwendung von Server.Transfer eines zu beachten: Die Zielseite verwendet den von der Originalseite erstellten Antwortstrom, was dazu führt, dass ASP.NETs Machine Authentication Check (MAC) davon ausgeht, dass es sich um den ViewState der neuen Seite handelt wurde manipuliert. Wenn Sie daher die Formulardaten- und Abfragezeichenfolgensammlung der Originalseite beibehalten möchten, müssen Sie die Eigenschaft „EnableViewStateMac“ der Page-Direktive der Zielseite auf „False“ festlegen.
2.3 Server.Execute
Die Server.Execute-Methode ermöglicht es der aktuellen ASPX-Seite, eine angegebene ASPX-Seite auf demselben Webserver auszuführen. Wenn die angegebene ASPX-Seite ausgeführt wird, kehrt der Kontrollfluss zu der Stelle zurück, an der die ursprüngliche Seite den Server.Execute ausgegeben hat Anruf.
Diese Seitennavigationsmethode ähnelt einem Funktionsaufruf für eine ASPX-Seite. Die aufgerufene Seite kann auf die Formulardaten- und Abfragezeichenfolgensammlung der aufrufenden Seite zugreifen, daher muss die EnableViewStateMac-Eigenschaft des Page-Befehls der aufgerufenen Seite auf False gesetzt sein.
Standardmäßig wird die Ausgabe der aufgerufenen Seite an den aktuellen Antwortstream angehängt. Allerdings verfügt die Server.Execute-Methode über eine überladene Methode, die es ermöglicht, die Ausgabe der aufgerufenen Seite über ein TextWriter-Objekt (oder dessen Unterobjekt, z. B. ein StringWriter-Objekt) abzurufen, anstatt sie direkt an den Ausgabestream anzuhängen Das auf der Originalseite Sie können die Position der Ausgabeergebnisse der aufgerufenen Seite einfach anpassen.
Um den Arbeitsprozess zu veranschaulichen, erstellen wir ein Webformular, fügen ein Schaltflächensteuerelement (Button1) und ein Textsteuerelement (Literal1) ein, wechseln zur Codeansicht in der Designoberfläche, fügen eine Imports-Anweisung des System.IO-Namespace hinzu und Fügen Sie dann den Code hinzu, der ausgeführt wird, wenn der Benutzer auf die Schaltfläche klickt:
Private Sub Button1_Click( _
ByVal sender As System.Object, _
ByVal e As System.EventArgs) _
Handles Button1.Click
Dim sw As StringWriter = New StringWriter()
Server.Execute( „WebForm2. aspx“, sw)
Literal1.Text = sw.ToString()
End Sub
Erstellen Sie dann eine zweite Seite WebForm2.aspx für dieselbe Webanwendung. Gehen Sie zur HTML-Ansicht der Seite und ändern Sie deren Page-Direktive, um die ViewState-Prüfung zu deaktivieren:
<%@ Page Language="vb" AutoEventWireup="false" Codebehind="WebForm2.aspx.vb"
Inherits="Navigate.WebForm2" EnableViewStateMac= "false "%>
Gehen Sie erneut zur Entwurfsansicht und fügen Sie der zweiten Seite einige Steuerelemente hinzu. Als nächstes legen Sie die erste Seite als Standardseite fest und starten die Anwendung. Klicken Sie auf die Schaltfläche, und das Steuerelement von WebForm2 wird dort angezeigt, wo die Literal-Schaltfläche in WebForm1 platziert ist, wie in Abbildung 1 dargestellt. Beachten Sie, dass der Seitentitel und die URL immer noch die Originalseite von WebForm1 anzeigen.
Abbildung 1: Verwenden Sie Server.Execute, um zwei Quelldateien zusammenzuführen.
Wenn Sie die Methode Server.Transfer oder Server.Execute zum Implementieren der Navigation verwenden, ist Folgendes zu beachten: Die endgültige Seite ist möglicherweise keine legale HTML-Seite, da die Seite letztendlich zurückgegeben wird Der Client kann mehrere <HTML>- und <BODY>-Tags enthalten. Der Internet Explorer scheint diese Situation zu tolerieren und korrekt zu handhaben. Wenn Sie jedoch einen anderen Browser verwenden möchten, sollten Sie ihn sorgfältig testen.
3. Vergleich und Auswahl
Da es so viele Möglichkeiten gibt, von einer Seite zur anderen zu navigieren, wie sollten Sie die beste Navigationsmethode auswählen? Hier sind einige Faktoren, die Sie berücksichtigen sollten:
·Hyperlinks eignen sich am besten, wenn Sie möchten, dass Benutzer entscheiden, wann sie die Seite wechseln und welche Seite sie aufrufen möchten.
·Wenn Sie ein Programm zur Steuerung des Konvertierungsziels verwenden möchten, der Konvertierungszeitpunkt jedoch vom Benutzer bestimmt wird, verwenden Sie das HyperLink-Steuerelement des Webservers, um dessen NavigateUrl-Eigenschaft dynamisch festzulegen.
·Wenn Sie den Benutzer mit einer Ressource auf einem anderen Server verbinden möchten, verwenden Sie Response.Redirect.
· Verwenden Sie Response.Redirect, um Benutzer mit Nicht-ASPX-Ressourcen wie HTML-Seiten zu verbinden.
· Wenn Sie die Abfragezeichenfolge als Teil der URL beibehalten möchten, verwenden Sie Response.Redirect.
·Wenn Sie den Ausführungsprozess auf eine andere ASPX-Seite auf demselben Webserver übertragen möchten, sollten Sie Server.Transfer anstelle von Response.Redirect verwenden, da Server.Transfer unnötige Netzwerkkommunikation vermeiden und dadurch eine bessere Leistung und Browsing-Effekte erzielen kann.
· Wenn Sie die Ausgabeergebnisse einer ASPX-Seite erfassen und die Ergebnisse dann an einer bestimmten Stelle in eine andere ASPX-Seite einfügen möchten, verwenden Sie Server.Execute.
·Wenn Sie sicherstellen möchten, dass die HTML-Ausgabe legal ist, verwenden Sie bitte Response.Redirect und nicht die Methode Server.Transfer oder Server.Execute.
Dieser Artikel wurde übersetzt von: http://www.ondotnet.com/pub/a/dotnet/2003/04/07/aspnetnav.html