Gewusst wie: Übergeben von Werten zwischen ASP.NET-Webseiten

Aktualisiert: November 2007

Wenn die Anwendung von einer ASP.NET-Webseite zu einer anderen weiterleitet (navigiert), wird es häufig vorkommen, dass Sie Informationen von der Quellseite an die Zielseite übergeben möchten. Dies könnte z. B. der Fall bei einer Seite sein, auf der Benutzer Artikel zum Kauf auswählen können. Wenn der Benutzer die Seite absendet, möchten Sie eine andere Seite aufrufen, die die vom Benutzer eingegebenen Informationen verarbeiten kann.

Sie können Informationen zwischen Seiten auf verschiedene Arten übergeben. Dies ist teilweise davon abhängig, wie die Weiterleitung erfolgt. Es gibt folgende Optionen:

  • Verwenden einer Abfragezeichenfolge, die Informationen an den URL der Zielseite anfügt. Sie können eine Abfragezeichenfolge verwenden, wenn Sie mit einem HyperLink-Steuerelement Navigation in eine Seite einbauen oder wenn Sie mit der Redirect-Methode programmgesteuert zu einer anderen Seite weiterleiten.

    Die Übergabe von Werten in einer Abfragezeichenfolge funktioniert sogar, wenn die Seiten nicht zur selben Webanwendung gehören, und auch dann, wenn Sie Informationen an eine Seite übergeben möchten, die keine ASP.NET-Webseite ist. Falls die Zielseite eine ASP.NET-Webseite ist, können Sie den Wert der Abfragezeichenfolge aus der QueryString-Eigenschaft des HttpRequest-Objekts lesen.

    Hinweis:

    Übergeben Sie niemals vertrauliche Daten in einer Abfragezeichenfolge, da die Informationen für Benutzer sichtbar und leicht zu manipulieren sind, also ein potenzielles Sicherheitsrisiko darstellen.

  • Verwenden des Sitzungszustands zum Speichern von Informationen, die dann in der aktuellen Anwendung für alle ASP.NET-Webseiten zugänglich sind. Dies belegt jedoch Speicherplatz auf dem Server. Die Informationen werden bis zum Ablauf der Sitzung gespeichert, was zu einem erheblich höheren Aufwand führen kann, als beim einfachen Übergeben von Informationen an die nächste Seite wünschenswert wäre. Ausführliche Informationen finden Sie unter Übersicht über die ASP.NET-Zustandsverwaltung.

  • Auf der Zielseite können Sie die Werte von Steuerelementen und öffentlichen Eigenschaften direkt aus der Quellseite lesen. Diese Strategie funktioniert in zwei Situationen: wenn die Quellseite seitenübergreifend an die Zielseite sendet (weitere Informationen finden Sie unter Gewusst wie: Senden von ASP.NET-Webseiten an eine andere Seite) und wenn Sie die Transfer-Methode für die Übertragung von der Quell- zur Zielseite auf dem Server aufrufen. Die Strategie, Werte direkt aus der Quellseite zu lesen, wird in diesem Thema beschrieben.

Abrufen von öffentlichen Eigenschaftenwerten aus der Quellseite

Wenn Sie die Quellseite speziell für die Freigabe von Informationen für Zielseiten entwerfen und beide Seiten ASP.NET-Webseiten sind, können Sie der Quellseite öffentliche Eigenschaften hinzufügen, die die Informationen verfügbar machen, die Sie für die Seiten freigeben möchten. Sie können dann die Werte der Eigenschaften in den Zielseiten lesen.

Hinweis:

Sie können nur Quellseiteneigenschaften in der Zielseite lesen, wenn beide Seiten zur gleichen Webanwendung gehören.

So rufen Sie öffentliche Eigenschaftenwerte aus der Quellseite ab

  1. Erstellen Sie auf der Quellseite eine oder mehrere öffentliche Eigenschaften.

    Im folgenden Codebeispiel wird eine Eigenschaft mit dem Namen CurrentCity gezeigt, die den Wert eines TextBox-Steuerelements mit dem Namen textCity verfügbar macht.

    Public ReadOnly Property CurrentCity() As String
        Get
            Return textCity.Text
        End Get
    End Property
    
    public String CurrentCity
    {
        get
        {
            return textCity.Text;
        }
    }
    
    Hinweis:

    Eigenschaften auf der Quellseite, die hauptsächlich erstellt wurden, um Werte für das seitenübergreifende Senden von Daten verfügbar zu machen, sind normalerweise schreibgeschützt. Obwohl die Quellseite öffentliche Eigenschaften mit Lese-/Schreibzugriff enthalten kann, ist es im Allgemeinen nicht sinnvoll, eine Quellseiteneigenschaft über die Zielseiteneigenschaft festzulegen, da der Wert nicht beibehalten wird.

  2. Fügen Sie auf der Zielseite eine @ PreviousPageType-Seitendirektive hinzu, die auf die Quellseite zeigt.

    Im folgenden Codebeispiel wird eine PreviousPageType-Direktive gezeigt, die auf eine Quellseite mit dem Namen SourcePage.aspx verweist.

    <%@ PreviousPageType VirtualPath="~/SourcePage.aspx" %> 
    

    Die PreviousPageType-Direktive bewirkt, dass die PreviousPage-Eigenschaft der Seite auf die Quellseitenklasse typisiert wird.

  3. Verwenden Sie im Zielseitencode stark typisierte Member der PreviousPage-Eigenschaft, um die Quellcodeeigenschaften zu lesen.

    Im folgenden Codebeispiel wird der Wert der CurrentCity-Eigenschaft gelesen, die in der Quellseite definiert ist.

    Label1.Text = PreviousPage.CurrentCity
    
    Label1.Text = PreviousPage.CurrentCity;
    

Abrufen von Steuerelementinformationen aus einer Quellseite in der gleichen Anwendung

Wenn sowohl Quell- als auch Zielseite ASP.NET-Webseiten in derselben Webanwendung sind, können Sie die Werte von Steuerelementen in der Quellseite lesen, während Sie auf der Zielseite sind. Sie können diese Strategie verwenden, wenn die Quellseite keine öffentlichen Eigenschaften verfügbar macht, die die benötigten Informationen enthalten.

So rufen Sie die Werte von Steuerelementen auf der Quellseite in der gleichen Anwendung ab

  • Rufen Sie von der Zielseite aus mit der PreviousPage-Eigenschaft einen Verweis auf die Quellseite ab. Rufen Sie dann die FindControl-Methode auf, um einen Verweis auf das gewünschte Steuerelement zu erhalten.

    Im folgenden Codebeispiel wird der Wert des TextBox1-Steuerelements der Quellseite abgerufen und im Steuerelement mit dem Namen Label1 angezeigt:

    If Not Page.PreviousPage Is Nothing Then
        Dim SourceTextBox As TextBox
        SourceTextBox = CType(PreviousPage.FindControl("TextBox1"), _
            TextBox)
        If Not SourceTextBox Is Nothing Then
            Label1.Text = SourceTextBox.Text
        End If
    End If
    
    if (Page.PreviousPage != null)
    {
        TextBox SourceTextBox = 
            (TextBox)Page.PreviousPage.FindControl("TextBox1");
        if (SourceTextBox != null)
        {
            Label1.Text = SourceTextBox.Text;
        }
    }
    
    Hinweis:

    Die FindControl-Methode sucht Steuerelemente im aktuellen Namenscontainer. Wenn das von Ihnen gesuchte Steuerelement in einem anderen Steuerelement enthalten ist (typischerweise in einer Vorlage), benötigen Sie zuerst einen Verweis auf den Container. Dann können Sie den Container nach dem gewünschten Steuerelement durchsuchen.

Abrufen von Sendeinformationen aus einer Quellseite in einer anderen Anwendung

Wenn Quell- und Zielseite nicht in derselben Webanwendung sind, können Sie die gesendeten Werte der Quellseite in der Zielseite lesen. Diese Technik funktioniert auch, wenn nur die Zielseite eine ASP.NET-Webseite ist. Beachten Sie, dass Sie nur die gesendeten Werte abrufen können; Sie können nicht die Werte beliebiger Steuerelemente der Seite lesen.

So rufen Sie die Werte von Steuerelementen einer Quellseite in einer anderen Anwendung ab

  • Lesen Sie in der Zielseite die Form-Auflistung, die ein Wörterbuch mit Name-Wert-Paaren zurückgibt (ein Paar pro gesendetem Wert).

    Im folgenden Codebeispiel werden ID und Wert jedes gesendeten Steuerelements in der Quellseite angezeigt und die gesendeten Werte in einer Bezeichnung mit dem Namen Label1 angezeigt.

    Hinweis:

    Sendeinformationen von ASP.NET-Webseiten schließen die Werte ausgeblendeter Felder ein, z. B. __VIEWSTATE, __EVENTTARGET und __EVENTARGUMENT, die in der Seite der internen Verarbeitung dienen. Im folgenden Codebeispiel werden die Werte gesendeter Felder mit einem führenden doppelten Unterstrich (__) im Namen ausgeschlossen.

    Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _
            Handles Me.Load
        Dim displayValues As New StringBuilder()
        Dim postedValues As NameValueCollection = Request.Form
        Dim nextKey As String
        For i As Integer = 0 To postedValues.AllKeys.Length - 1
            nextKey = postedValues.AllKeys(i)
            If nextKey.Substring(0, 2) <> "__" Then
                displayValues.Append("<br>")
                displayValues.Append(nextKey)
                displayValues.Append(" = ")
                displayValues.Append(postedValues(i))
            End If
        Next
        Label1.Text = displayValues.ToString()
    End Sub
    
    void Page_Load(object sender, EventArgs e)
    {
        System.Text.StringBuilder displayValues = 
            new System.Text.StringBuilder();
        System.Collections.Specialized.NameValueCollection 
            postedValues = Request.Form;
        String nextKey;
        for(int i = 0; i < postedValues.AllKeys.Length - 1; i++)
        {
            nextKey = postedValues.AllKeys[i];
            if(nextKey.Substring(0, 2) != "__")
            {
                displayValues.Append("<br>");
                displayValues.Append(nextKey);
                displayValues.Append(" = ");
                displayValues.Append(postedValues[i]);
            }
        }
       Label1.Text = displayValues.ToString();
    }
    

Siehe auch

Aufgaben

Gewusst wie: Ermitteln des Aufrufverfahrens einer ASP.NET-Webseite

Konzepte

Seitenübergreifendes Senden in ASP.NET-Webseiten

Übersicht über die ASP.NET-Zustandsverwaltung