2009-05-05 14 views
12

Ich habe die folgende Situation: Ich habe ein Textfeld in einem Ajax Updatepanel. Überall dort, wo der Benutzer das Textfeld eingibt, muss ich eine Nachricht anzeigen (unterschiedliche Nachricht, die von den vom Benutzer eingegebenen Daten abhängt).Problem mit Textfeld im updatepanel - nicht OnTextChanged Ereignis

 <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> 

In Server-Seite ich folgendes auf Seite Last

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

und die Methode wie folgt

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

Mein Problem geschrieben haben, ist, dass: wenn der Benutzer in der Textbox Es verursacht kein OnTextChanged-Ereignis.

Fehle ich etwas?

+0

Anmerkung: nur, wenn ich ‚Tab‘ oder ‚Enter‘ hit verursacht es OnTextChanged Ereignis – DaDa

Antwort

5

Stellen Sie die EventName Eigenschaft für Ihre txtMyTexbox AsyncPostBackTrigger auf Textchanged

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

Andere sugguestion:

Haben Sie versucht, an der AutoComplete Kontrolle aus, die Teil ist vom AjaxControlToolKit? Es verhält sich genauso wie Sie möchten, dass sich Ihre Lösung verhält.

+0

danke, aber die situation bleibt gleich. – DaDa

6

Ich bin mir nicht sicher, ob Ihr Problem etwas mit der UpdatePanel zu tun hat.

In der Tat löst das TextChanged Ereignis nicht während der Eingabe. Es wird nur ausgelöst nach der Textfeld verliert den Fokus. Dies geschieht direkt, wenn AutoPostBack auf True festgelegt ist oder wenn der nächste Postback auftritt. Bitte beachten Sie die Dokumente für die AutoPostBack property und TextChanged event.

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'); 
     } 
    }); 
}); 
0

eine Abhilfe Kontroll Textbox - Causes Eigenschaft und legen Sie es auf true

1

seine strnage, dass auch Panel nach der Zugabe von Update wissen/AsyncPostBackTrigger, TextBox Change ‚doesn t arbeiten richtig. Irgendwann funktioniert es und manchmal nicht .. Da es asynchronen Anruf ist, müssen wir einige Zeit aktualisieren, oder warten oder unvorhersehbar, hofft Microsoft wird mit kompetenten kommen .. Unten sind einfache Möglichkeit, Benutzernamen ziemlich gut zu überprüfen

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

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

------- im aspx -add-Skript ---------------------------------- -----

<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 Skript -------------------------- ------------- ---------------- aspx.cs ---------------- --- if (TextBox1.Text.Length> 21) { CheckUsrName(); Label2.Text = ""; } sonst { Label2.Text = "Länge ist weniger als 21"; // lass uns ein paar Sachen machen..bla..bla } ----------------------------------- -------------- CheckUsername()

public void CheckUsrName() {

Call dB values 

} 
0

die Kontrolle, die ID in AsyncPostBackTrigger verwendet wird außerhalb des Update-Panel sein muss (dass Ursache der Async-Aufruf) wie folgt aus Feuer:

<tr> 
    <td colspan="4"><asp:Label ID="lblEnter_Successfully" Text="Enter Record SuccessFully" runat="server" Visible ="false" ForeColor ="Blue" Font-Size ="Larger" Font-Bold ="true"></asp:Label> 
    </td> 
</tr>           
</table>     
</ContentTemplate> 

    <Triggers> 
    <asp:AsyncPostBackTrigger ControlID = "Button_Save" EventName ="Click"/> 
    </Triggers>      

</asp:UpdatePanel> 
      <table> 
       <tr> 
       <td width = "472px" align ="right">    
        <asp:Button ID="Button_Save" runat="server" Text="Save" OnClientClick ="return URLValidation();"/> 
        <asp:Button ID="Button_Clear" runat="server" Text="Clear"/> 
       </td> 
       </tr> 
      </table> 
Verwandte Themen