共用方式為


處理回傳資料

對於能夠檢查用戶端回傳的表單資料的控制項,它必須實作 System.Web.UI.IPostBackDataHandler 介面。這個介面的合約可以讓控制項判斷其狀態是否要因回傳而改變,並引發適當的事件。IPostBackDataHandler 介面包含兩個方法。

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

回傳時,網頁架構會在張貼的內容搜尋符合伺服器控制項 (實作 IPostBackDataHandler) UniqueID 的值。它接著在實作這個介面的各個控制項上循序叫用 LoadPostDataLoadPostData 的二個引數是:識別控制項的金鑰和包含張貼資料的集合 NameValueCollectionLoadPostData 基本上被實作為會因回傳而更新控制項的狀態。下列範例針對自訂文字方塊控制項示範 LoadPostData 的實作。

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
      

如果控制項的狀態由於回傳而變更,LoadPostData 傳回 true;否則傳回 false。網頁架構記錄所有傳回 true 的控制項,並在那些控制項上叫用 RaisePostDataChangedEvent。變更事件 (若有的話) 會從這個方法引發。回傳資料處理因此將發生於兩個階段 - 更新狀態和引發變更告知。當它們在所有控制項有機會載入回傳資料之前不正確地變更狀態時,這將防止變更告知在回傳資料載入期間被引發。下列程式片段針對自訂文字方塊控制項示範 RaisePostDataChanged 的實作。

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

呈現邏輯指派 UniqueID 給控制項的 name 屬性,是必要的。否則,網頁架構將無法轉送回傳資料至您的控制項。如果您的控制項發出多個表單項目,至少其中一個項目必須具有對應至控制項的 UniqueID 的 name 屬性。如需發出多個表單欄位的自訂控制項的範例,請參閱撰寫和呈現的比較。下列程式片段指派 UniqueID 給 name 屬性。

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

如需參與回傳資料處理的自訂文字方塊控制項的範例,請參閱回傳資料處理範例

請參閱

回傳資料處理範例