Mikelon85
Mikelon85

Reputation: 432

textChanged event doesn´t fire and i have autopostback=true

I have a textbox event declarated but it doesn´t fire. I have seen in SO other answers but all of them say that autopostback property has been true and i have it

my aspx

<asp:ScriptManager ID="ScriptManager2" runat="server" />    
            <asp:TextBox runat="server" ID="txtDia" Width="120px" Height="20px" 
                AutoPostBack="True" CssClass="textbox" OnTextChanged="txtDia_TextChanged"/>
            <Juice:Datepicker ID="Datepicker2" runat="server" TargetControlID="txtDia" 
                DateFormat="dd/mm/yy" 
                MonthNames="Enero,Febrero,Marzo,Abril,Mayo,Junio,Julio,Agosto,Septiembre,Octubre,Noviembre,Diciembre" 
                MonthNamesShort="Ene,Feb,Mar,Abr,May,Jun,Jul,Ago,Sep,Oct,Nov,Dic," 
                AutoPostBack="True" /></td>

and my aspx.vb

Protected Sub txtDia_TextChanged(sender As Object, e As System.EventArgs) Handles         txtDia.TextChanged
        CargarDatos()
End Sub

Upvotes: 0

Views: 6974

Answers (5)

Jay Zelos
Jay Zelos

Reputation: 1399

What FAngel said is correct.

I've had the same issue when validating dates and using jquery datepicker. I used the below to fire the validation routines after the box had been populated. So technically they fired twice, once after the textbox had lost focus to the datepicker, then again when my code fired after the datepicker had populated the textbox. It would have been better to disable the onblur event and call directly from the below, but wasn't possible in my project.

$('.datePicker').each(function () {
     $(this).datepicker({
          onSelect: function () {
                $(this).trigger('blur');
          }
     });
});

You can use a variation on this by disabling the auto-postback and manually triggering it via the onSelect event.

Upvotes: 1

Dan
Dan

Reputation: 543

You need to specify the method to be called when the event is fired like so:

<asp:TextBox runat="server" ID="txtDia" Width="120px" Height="20px" OnTextChanged="txtDia_TextChanged" AutoPostBack="True" CssClass="textbox"/>

Note:

OnTextChanged="txtDia_TextChanged"

Upvotes: 0

Pawan
Pawan

Reputation: 1075

In your aspx you should write

<asp:TextBox runat="server" ID="txtDia" Width="120px" Height="20px" 
                AutoPostBack="True" CssClass="textbox" OnTextChanged="txtDia_TextChanged"/>

Upvotes: 2

Viktor S.
Viktor S.

Reputation: 12815

You should define your textbox like this (see OnTextChanged="txtDia_TextChanged" being added):

<asp:TextBox OnTextChanged="txtDia_TextChanged" 
              runat="server" ID="txtDia" Width="120px" Height="20px" 
              AutoPostBack="True" CssClass="textbox"/>

And remember that this event will rise onblur (focus removed from that textbox) only.

Upvotes: 3

Tim Schmelter
Tim Schmelter

Reputation: 460058

The event is not triggered if you overwrite the text in codebehind. So for example if you databind the control where the TextBox sits in.

You should so that only If Not IsPostBack:

protected void Page_Load(object sender, EventArgs e)
{
    if(!IsPostback)
    {
        DataBindAllControls(); // including your textbox
    }
}

Edit: Sorry, here VB.NET:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    If Not IsPostBack Then
        DataBindAllControls() ' including your textbox
    Else
End Sub

Upvotes: 1

Related Questions