2009-10-19 5 views
0

내 질문 :TextBox TextChanged 이벤트가 발생하면?

ViewState는 TextBox, CheckBox 및 그와 같은 컨트롤 값의 저장 및 복원을 책임지지 않습니다. 이것은 IPostBackDataHandler 인터페이스를 구현하는 컨트롤에 LoadPostData() 메서드에 의해 수행됩니다.

로드 스테이지 후에도 RaisePostBackEvent 스테이지가 발생하고 버튼 클릭과 같은 해당 이벤트가 발생하거나 TextBox에서 텍스트가 변경되면 해당 TextChanged 이벤트가 발생합니다.

ViewState가 해당 텍스트를 담당하지 않고 TextBox TextChanged 이벤트를 실제로 발생시키는 메커니즘이 있으면 시스템이 텍스트를 어떻게 추적합니까?

나는이 시점에서 실제로 혼란 스럽다.

미리 감사드립니다.

+0

그것은 추적 및 제어의 필수 정보를 유지 ControlState 수 있지만 수 있을까요? – Tarik

답변

0

나는 그것을 이런 식으로 일한다고 생각 : 그것의 텍스트 상태로 발사 있기 때문에

TextBox 컨트롤 대신 IPostBackEventHandler의의 IPostBackDataHandler를 구현합니다. 따라서 어떤 변경 사항이 결정된 postedValue에서 발생하면

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

부분을 true로 반환하고 마지막으로 TextChanged가 실행되도록 유지합니다. Pff는 혼란 스럽지만 쉽게 보입니다. 이 컨트롤 국가는의 IPostBackDataHandler이 텍스트 상자에 의해 구현된다 그래서 이유 경우

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

관련 문제