2009-10-19 201 views
0

我的問題是:當TextBox TextChanged事件被觸發?

正如我們所知,ViewState不負責存儲和恢復TextBox,CheckBox等控件的值。這是通過LoadPostData()方法來控制實現IPostBackDataHandler接口的。

我們也知道Load階段後,RaisePostBackEvent階段發生並且引發相應的事件,例如Button Click或者如果TextBox在TextBox中改變了,它的TextChanged事件將被觸發。

那麼,如果ViewState不負責這個問題,以及哪種機制實際上觸發了TextBox TextChanged事件,那麼系統如何跟蹤文本改變?

我實際上在這一點上感到困惑。

在此先感謝。

+0

它可能是ControlState,它跟蹤並保持控件的基本信息,但如果它是Control State,那麼爲什麼IPostBackDataHandler是由TextBox實現的? – Tarik 2009-10-19 04:21:09

回答

0

我覺得是這樣工作的:因爲它是由它的文本狀態發射

TextBox控件實現IPostBackDataHandler代替IPostBackEventHandler。因此,如果任何變化postedValue發生被判定

if (presentValue == null || !presentValue.Equals(postedValue)) { 
      Text = postedValue; 
      return true; 
     } 

部分則返回true,並繼續執行所以最後框TextChanged解僱。 PFF令人困惑,但看起來很容易。

using System; 
using System.Web; 
using System.Web.UI; 
using System.Collections; 
using System.Collections.Specialized; 


namespace CustomWebFormsControls { 

    [System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name="FullTrust")] 
    public class MyTextBox: Control, IPostBackDataHandler { 


    public String Text { 
    get { 
     return (String) ViewState["Text"]; 
    } 

    set { 
     ViewState["Text"] = value; 
    } 
    }  


    public event EventHandler TextChanged; 


    public virtual bool LoadPostData(string postDataKey, 
    NameValueCollection postCollection) { 

    String presentValue = Text; 
    String postedValue = postCollection[postDataKey]; 

    if (presentValue == null || !presentValue.Equals(postedValue)) { 
     Text = postedValue; 
     return true; 
    } 

    return false; 
    } 


    public virtual void RaisePostDataChangedEvent() { 
    OnTextChanged(EventArgs.Empty); 
    } 


    protected virtual void OnTextChanged(EventArgs e) { 
    if (TextChanged != null) 
     TextChanged(this,e); 
    } 


    protected override void Render(HtmlTextWriter output) { 
    output.Write("<INPUT type= text name = "+this.UniqueID 
     + " value = " + this.Text + " >"); 
    } 
    } 
} 
+0

因此,只要回發數據發生變化,它也會更改控制狀態。 – Tarik 2009-10-19 04:57:09

相關問題