Share via


Verarbeiten von Postback-Daten

Um Formulardaten untersuchen zu können, die vom Client zurückgesendet wurden, muss das Steuerelement die System.Web.UI.IPostBackDataHandler-Schnittstelle implementieren. Durch den über diese Schnittstelle definierten Vertrag kann für ein Serversteuerelement festgelegt werden, ob sein Zustand aufgrund der zurückgesendeten Daten geändert und entsprechende Ereignisse ausgelöst werden müssen. Die IPostBackDataHandler-Schnittstelle enthält zwei Methoden.

public interface IPostBackDataHandler{
   public bool LoadPostData(string postDataKey, 
                           NameValueCollection postCollection);
   public void RaisePostDataChangedEvent();
}
[Visual Basic]
Public Interface IPostBackDataHandler
   Public Function LoadPostData(postDataKey As String, _
            postCollection As NameValueCollection) As Boolean
   Public Sub RaisePostDataChangedEvent()
End Interface

Nach dem Postback wird vom Seitenframework der gesendete Inhalt für jene Werte gesucht, die mit den UniqueIDs der Serversteuerelemente übereinstimmen, bei denen die IPostBackDataHandler-Schnittstelle implementiert ist,. Danach wird nacheinander die LoadPostData-Methode jedes Steuerelements aufgerufen, bei dem die Schnittstelle implementiert ist. Die beiden Argumente von LoadPostData sind: der Schlüssel, mit dem das Steuerelement identifiziert wird, und die Auflistung NameValueCollection, in der sich die gesendeten Daten befinden. LoadPostData ist üblicherweise so implementiert, dass infolge des Postbacks der Zustand des Steuerelements aktualisiert wird. Im folgenden Beispiel wird die Implementierung von LoadPostData für ein benutzerdefiniertes Textfeld-Steuerelement gezeigt.

public virtual bool LoadPostData(string postDataKey, NameValueCollection postCollection) {
    string presentValue = Text;
    string postedValue = postCollection[postDataKey];
    
    if (!presentValue.Equals(postedValue)){
          Text = postedValue;
          return true;
    }
    return false;
}
[Visual Basic]
Public Overridable Function LoadPostData(postDataKey As String, postCollection As NameValueCollection) As Boolean
   Dim presentValue As String = Text
   Dim postedValue As String = postCollection(postDataKey)
   If Not presentValue.Equals(postedValue) Then
      Text = postedValue
      Return True
   End If
   Return False
End Function
      

Wenn sich infolge des Postbacks der Zustand des Steuerelements geändert hat, wird von LoadPostData der Wert true zurückgegeben; andernfalls der Wert false. Durch das Seitenframework werden alle Steuerelemente verfolgt, die den Wert true zurückgegeben haben. Bei diesen Elementen wird RaisePostDataChangedEvent aufgerufen. Liegen Änderungsereignisse vor, werden sie durch diese Methode ausgelöst. Die Verarbeitung von Postback-Daten erfolgt in zwei Phasen – Aktualisierung des Zustands und Auslösen der Änderungsbenachrichtigungen. Dadurch wird verhindert, dass Änderungsbenachrichtigungen bereits während des Ladens der Postback-Daten ausgelöst werden. Das könnte fälschlicherweise dazu führen, dass der Zustand geändert wird, noch bevor alle Steuerelemente die Möglichkeit hatten, die Postback-Daten zu laden. Im folgenden Codefragment wird die Implementierung von RaisePostDataChanged für ein benutzerdefiniertes Textfeld-Steuerelement gezeigt.

public virtual void RaisePostDataChangedEvent() {
            OnTextChanged(EventArgs.Empty);      
      }
[Visual Basic]
Public Overridable Sub RaisePostDataChangedEvent()
   OnTextChanged(EventArgs.Empty)
End Sub

Es ist unbedingt notwendig, dass durch die Wiedergabelogik die UniqueID mit dem Name-Attribut des Steuerelements verknüpft wird. Andernfalls ist das Seitenframework nicht in der Lage, die Postback-Daten zu den entsprechenden Steuerelementen weiterzuleiten. Wenn von dem Steuerelement mehrere Formularelemente gesendet werden, muss das Name-Attribut mindestens eines Elements mit der UniqueID des Steuerelements übereinstimmen. Ein Beispiel für ein benutzerdefiniertes Steuerelement, das mehrere Formularfelder versendet, finden Sie unter Vergleich von Komposition und Wiedergabe. Im folgenden Codefragment wird die UniqueID mit dem Name-Attribut verknüpft.

protected override void Render(HtmlTextWriter output) 
{
output.AddAttribute(HtmlTextWriterAttribute.Type, "text");
output.AddAttribute(HtmlTextWriterAttribute.Value, this.Text);
output.AddAttribute(HtmlTextWriterAttribute.Name, this.UniqueID);
output.RenderBeginTag(HtmlTextWriterTag.Input);
output.RenderEndTag();
}
[Visual Basic]
Protected Overrides Sub Render(output As HtmlTextWriter)
output.AddAttribute(HtmlTextWriterAttribute.Type, "text")
output.AddAttribute(HtmlTextWriterAttribute.Value, me.Text)
output.AddAttribute(HtmlTextWriterAttribute.Name, me.UniqueID)
output.RenderBeginTag(HtmlTextWriterTag.Input)
output.RenderEndTag()
End Sub

Ein Beispiel für ein benutzerdefiniertes Textfeld-Steuerelement, das an der Verarbeitung von Postback-Daten teilnimmt, finden Sie unter Beispiel für die Verarbeitung von Postback-Daten.

Siehe auch

Beispiel für die Verarbeitung von Postback-Daten