2009-03-05 4 views
0

Ich habe eine Benutzersteuerung, die eine < asp: TextBox > mit Autopostback auf True festgelegt hat. Wenn der Benutzer Text eingibt und aus dem Textfeld entfernt, löst asp.net ein Postback-Ereignis aus. Es wird jedoch nicht speziell von der Textbox behandelt, sondern ist einfach ein Postback - die page_load wird ausgelöst und das Leben geht weiter.Ermitteln, wann Postback auftritt, weil ein Textfeld geändert wird

Was ich brauche ist eine Möglichkeit zu wissen, dass diese Textbox das Ereignis ausgelöst hat. Ich möchte dann mein eigenes benutzerdefiniertes Ereignis auslösen, damit meine Hauptseite es abonnieren und das Ereignis behandeln kann, wenn sich das Textfeld ändert.

Zuerst dachte ich, ich könnte den Absender erfassen - ich nahm an, dass der Absender das Textfeld sein würde, aber es scheint die Seite selbst zu sein.

Wer hat irgendwelche Gedanken?

+0

Wenn Sie die Quelle der Seite anzeigen, sollte im Onchange-Ereignis der Eingabe ein __doPostBack-Aufruf erfolgen. Was sind die Parameter? – Guffa

+0

Danke für das Feedback Jungs. Ich wusste nicht, dass ich auch mit dem onTextChanged-Event umgehen musste - zuerst nahm ich an, dass es mit jedem Tastendruck feuern würde ... was weniger als wünschenswert wäre. Nächstes Mal muss ich die Dokumentation lesen :) – bugfixr

Antwort

1

Ich glaube, du etwas fehlt, so möchte ich es Schritt für Schritt erklären:

Ihre Textbox so etwas sein sollte:

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

und in Ihrem Code-Behind shhould Sie ein Ereignis haben wie folgt aus:

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

HINWEIS: wenn Sie möchten Ihre Veranstaltung in anhängen Code-Behind Sie können dies tun durch:

TextBox1.TextChanged +=new EventHandler(TextBox1_TextChanged); 

aber wenn Sie über benutzerdefinierte Steuerelemente sprechen, sollten Sie IPostBackDataHandler Schnittstelle implementieren Ereignisse zu erhöhen.

0

Ist dies eine dynamisch erstellte Benutzersteuerung oder Textbox? Wenn dies der Fall ist, müssen Sie dieses Steuerelement im Ereignis page_load neu erstellen, und das Ereignis sollte wie gewohnt in der Textbox ausgelöst werden.

0

Der Seitenlade-Sender ist immer ASP.default_aspx, weil die Seite das Ereignis aufruft.

Sie können eine Verbindung zu der geraden OnTextChanged herstellen, bei der dieser Absender das Textfeld ist, das den Post zurückverändert oder verursacht hat.

Beachten Sie, dass das Laden der Seite immer vor den Ereignissen auf den Steuerelementen ausgelöst wird.

0

Dies ist möglicherweise etwas, das übersehen werden könnte, aber haben Sie tatsächlich ein Ereignis für das TextChanged-Ereignis der Textbox codiert? Wenn Sie es auf Autopostback eingestellt haben, aber noch nie ein Ereignis dafür erstellt haben, erhalten Sie nur Ihre Seitenladung und andere damit verbundene Ereignisse.

0

Wie in anderen Antworten erwähnt, müssen Sie das Ereignis 'OnTextChanged' behandeln.