我有以下情况:我在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事件。
我错过了什么吗?
答案 0 :(得分:6)
我不确定您的问题与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');
}
});
});
答案 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>