2009-03-05 52 views
0

我有一個用戶控件,它有一個< asp:TextBox >並將autopostback設置爲true。當用戶鍵入文本並移出文本框時,asp.net將觸發​​回發事件。然而,它並不是由文本框專門處理,而是簡單地回發 - page_load激發,然後生活繼續。確定何時發生回發,因爲文本框被更改

我需要的是一種方法來知道這個文本框解僱了這個事件。然後我想激發我自己的自定義事件,以便我的主頁可以訂閱它並在文本框更改時處理事件。

起初我以爲我可以捕獲發件人 - 我假設發件人是文本框,但它似乎是頁面本身。

任何人有任何想法?

+0

如果您查看頁面的來源,則應在輸入的onchange事件中調用__doPostBack。什麼是參數? – Guffa 2009-03-05 13:26:42

回答

1

我認爲你缺少的東西,所以我想解釋它一步一步:

您的文本框應該是類似的東西:

<asp:TextBox runat="server" ID="TextBox1" AutoPostBack="true" 
OnTextChanged="TextBox1_TextChanged"></asp:TextBox> 

,並在你的代碼隱藏你shhould有一個事件這樣的:

protected void TextBox1_TextChanged(object sender, EventArgs e) 
{ 
    string str = TextBox1.Text; 
} 

注:,如果你想在附上事件的代碼隱藏,你可以這樣做:

TextBox1.TextChanged +=new EventHandler(TextBox1_TextChanged); 

,但如果你談論的自定義控件,您應該實現IPostBackDataHandler界面引發事件。

0

這是我動態創建的用戶控件還是文本框?如果是這樣,您必須在page_load事件中重新創建該控件,並且正常情況下應該在文本框中觸發該事件。

0

頁面加載發件人將始終爲ASP.default_aspx,因爲該頁面是調用該事件的內容。

您可以連接到OnTextChanged甚至OnTextChanged發件人將是已更改或導致回發的文本框。

請記住,頁面加載將始終在控件上的任何事件之前觸發。

0

這可能是一些可能被忽略的東西,但是您是否確實有事件編碼爲TextBox的TextChanged事件?如果您將其設置爲autopostback,但從未真正爲其創建事件,那麼您只會獲取網頁加載和其他相關事件。

0

正如在其他答案暗示,你需要處理'OnTextChanged'事件。

<asp:TextBox ID="TextBox1" runat="server" OnTextChanged="TextBox1_TextChanged"></asp:TextBox> 

private void TextBox1_TextChanged(object sender, System.EventArgs e) 
{ 
    TextBox txt = (TextBox)sender; 
    string id = txt.ID; 

    switch(id) 
    { 
     case "TextBox1": 
      break; 
    } 
} 
相關問題