updatepanel中的文本框问题 - 不会导致OnTextChanged事件

时间:2009-05-05 17:26:17

标签: asp.net ajax updatepanel

我有以下情况:我在ajax updatepanel中有一个文本框。无论用户在文本框中输入什么,我都必须显示一条消息(不同的消息取决于用户输入的数据)。

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

在服务器端,我在页面加载时写了以下内容

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

和这样的方法

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

我现在的问题是:当用户输入文本框时,它不会导致OnTextChanged事件。

我错过了什么吗?

6 个答案:

答案 0 :(得分:6)

我不确定您的问题与UpdatePanel

有什么关系

事实上,TextChanged事件在输入时不会触发。它只会在文本框失去焦点后触发。如果AutoPostBack设置为True,或者发生下一次回发,则会直接发生这种情况。请参阅AutoPostBack propertyTextChanged event的文档。

Afaik,你最好的选择可能是在javascript中处理keyup事件。

这是一个简单的jQuery示例:

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

答案 1 :(得分:5)

将txtMyTexbox EventName的{​​{1}}属性设置为TextChanged

AsyncPostBackTrigger

其他建议:

您是否尝试过查看属于AjaxControlToolKit的AutoComplete控件?它的行为方式与您希望解决方案的行为方式相同。

答案 2 :(得分:1)

答案 3 :(得分:0)

您不应该为TextBox使用RegisterAsyncPostBackControl。该方法实际上仅用于驻留在UpdatePanel之外的控件。我会尝试删除那行代码,看看会发生什么。

有关详细信息,请参阅此处:http://msdn.microsoft.com/en-us/library/system.web.ui.scriptmanager.registerasyncpostbackcontrol.aspx

答案 4 :(得分:0)

变通方法检查文本框 - causevalidation属性并将其设置为true

答案 5 :(得分:0)

在AsyncPostBackTrigger中使用的控件必须在更新面板之外(导致触发异步调用),如下所示:

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