12 Stimmen

Problem mit Textbox innerhalb updatepanel - nicht verursachen OnTextChanged Ereignis

Ich habe die folgende Situation: Ich habe ein Textfeld innerhalb eines Ajax-Updatepanels. Wo auch immer der Benutzer in das Textfeld tippt, muss ich eine Nachricht anzeigen (unterschiedliche Nachricht, die auf den Benutzer eingegebenen Daten abhängt).

     <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Always">
        <ContentTemplate>
            <asp:TextBox ID="txtMyTexbox" runat="server" Width="500px" OnTextChanged="txtMyTexbox_TextChanged" AutoPostBack="true"></asp:TextBox>
            <br />
            <asp:Label ID="lblMessage" runat="server" CssClass="errorMessage" Visible="false">Hello World</asp:Label>
         </ContentTemplate>
            <Triggers>
             <asp:AsyncPostBackTrigger ControlID="txtMyTexbox" />
            </Triggers>
      </asp:UpdatePanel>

Auf der Serverseite habe ich beim Laden der Seite folgendes geschrieben

ScriptManager.GetCurrent(this).RegisterAsyncPostBackControl(txtMyTexbox);           

und die Methode wie folgt

protected void txtMyTexbox_TextChanged(object sender, EventArgs e)
    {           
            if (.....)
            {
                lblMessage.Visible = false;
            }
            else
            {
                lblMessage.Visible = true;
            }            
    }

Mein Problem ist jetzt, dass: wenn der Benutzer in das Textfeld tippen es nicht OnTextChanged Ereignis verursachen.

Habe ich etwas verpasst?

6voto

Christoffer Lette Punkte 13576

Ich bin mir nicht sicher, ob Ihr Problem etwas mit dem UpdatePanel .

In der Tat, die TextChanged Ereignis wird nicht ausgelöst während des Tippens . Es wird nur feuern après verliert das Textfeld den Fokus. Dies geschieht direkt, wenn AutoPostBack wird eingestellt auf True oder wenn der nächste Postback erfolgt. Bitte lesen Sie die Dokumentation für das AutoPostBack-Eigenschaft und die Ereignis TextChanged .

Afaik, Ihre beste Wette ist wahrscheinlich das keyup Ereignis in Javascript zu behandeln.

Hier ist ein einfaches jQuery-Beispiel:

$(document).ready(function() {
    $(':text[id$=YourTextBox]').keyup(function() {
        if ($(this).val() === "your special value") {
            $('span[id$=YourLabel]').css('visibility', 'visible');
        }
        else {
            $('span[id$=YourLabel]').css('visibility', 'hidden');
        }
    });
});

5voto

Michael Kniskern Punkte 23892

Stellen Sie die EventName Eigenschaft für Ihr txtMyTexbox AsyncPostBackTrigger zu TextChanged

<Triggers>             
    <asp:AsyncPostBackTrigger ControlID="txtMyTexbox" EventName="TextChanged" />            
</Triggers>

Andere Anregung:

Haben Sie versucht, die AutoVervollständigen Steuerelement, das Teil des AjaxControlToolKits ist? Es verhält sich genauso, wie Sie es sich für Ihre Lösung wünschen.

1voto

Seine Strnage zu wissen, dass auch nach dem Hinzufügen von Update-Panel / AsyncPostBackTrigger, TextBox ChangeEvent nicht richtig funktioniert. Einige Zeit seine Werke und einige Male es nicht..Da es Asychronous Aufruf ist, müssen wir einige Zeit zu aktualisieren, oder warten oder unvorhersehbar, Hoffnungen microsoft wird mit kompetenten ein kommen. Unten sind einfache Art und Weise zu überprüfen Benutzernamen ziemlich gut

------ Unter Page_Load - aspx.cs -----------------------

this.TextBox1.Attributes.Add("onKeyUp", "fnUNameSubmit(this);");

-------in aspx -add script ---------------------------------------

<script language="javascript" type="text/javascript">

function fnUNameSubmit(urInput) {   
var inpt= urInput.value;
if (inpt.length > 21) { 
document.getElementById('<%= TextBox1.ClientID %>').style.backgroundColor = "green";
document.form1.submit();  // This is only trick we use here..
}
else {
document.getElementById('<%= TextBox1.ClientID %>').style.backgroundColor = "red";
}
  }
</script>

-------in aspx -add script --------------------------------------- ----------------aspx.cs ------------------- if (TextBox1.Text.Length > 21) { CheckUsrName(); Label2.Text = ""; } sonst { Label2.Text = "Länge ist kleiner als 21"; //lässt uns ein paar Dinge tun..bla..bla } ------------------------------------------------- CheckUsername()

public void CheckUsrName() {

  Call dB values

}

0voto

womp Punkte 113535

Sie sollten RegisterAsyncPostBackControl nicht für Ihre TextBox verwenden. Diese Methode ist eigentlich nur für Steuerelemente geeignet, die sich außerhalb von UpdatePanels befinden. Ich würde versuchen, diese Codezeile zu entfernen und zu sehen, was passiert.

Hier finden Sie weitere Informationen: http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerasyncpostbackcontrol.aspx

0voto

Ein Workaround: Prüfen Sie die Eigenschaft textbox - causesvalidation und setzen Sie sie auf true

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X