我有以下情况:我在ajax更新面板内有一个文本框.无论用户在文本框中输入的内容,我必须显示一条消息(取决于用户键入的数据的不同消息).
<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事件.
我错过了什么吗?
解决方法
我不确定您的问题与UpdatePanel有关.
实际上,TextChanged事件在打字时不会触发.只有在文本框失去焦点后才会触发.如果AutoPostBack设置为True或发生下一个回发,则会直接发生.请参阅AutoPostBack property和TextChanged 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'); } }); });