带文本框控件的AJAX触发器
本文关键字:AJAX 触发器 控件 文本 | 更新日期: 2023-09-27 17:58:40
当我在ID为"UpdatePanel2"的UpdatePanel中的"触发器"中放入ID为"MessageTextBox"的"TextBox"控件时,这个ID为"Message TextBox"的"TextBox"不想通过AJAX回发。ID为"MessageButton"的"Button"控件工作正常,但此TextBox不希望工作。为什么?
<asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
<br />
<asp:TextBox ID="MessageTextBox" runat="server" AutoPostBack="true" Height="150px" Width="400px"></asp:TextBox>
<br />
<asp:Button ID="MessageButton" runat="server" Text="Send" OnClick="MessageButton_Click" />
<br />
<br />
<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<Triggers>
<asp:AsyncPostBackTrigger ControlID="MessageButton" />
<asp:AsyncPostBackTrigger ControlID="MessageTextBox" />
</Triggers>
<ContentTemplate>
<asp:DataList ID="ChatDataList" runat="server" >
<HeaderTemplate>
<table style="border:1px solid red">
</HeaderTemplate>
<ItemTemplate>
<tr>
<td><asp:Label ID="lblRaterName" runat="server" Text='<%# Eval("Text")%>'></asp:Label></td>
</tr>
</ItemTemplate>
<FooterTemplate>
</table>
</FooterTemplate>
</asp:DataList>
</ContentTemplate>
</asp:UpdatePanel>
当我像这样包装这个"TextBox"控件时,所有控件都可以工作,但我更喜欢用触发器的另一种方式(不像上面的代码那样工作的方式):
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="MessageTextBox" runat="server" Height="150px" Width="400px"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
您应该在AsyncPostBackTrigger
:中指定EventName
<asp:AsyncPostBackTrigger ControlID="MessageTextBox" EventName="TextChanged" />
当焦点丢失时,TextBox将仅触发回发。
或者,您可以在Page_Load
:上使用ScriptManager.RegisterAsyncPostBackControl方法注册文本框
ScriptManager1.RegisterAsyncPostBackControl(MessageTextBox);
或者,您甚至可以使用以下脚本强制更新面板回发:
<script type="text/javascript">
function refreshUpdatePanel() {
__doPostBack('<%= UpdatePanel2.UniqueID %>', '');
}
</script>
<asp:TextBox ID="MessageTextBox" runat="server" AutoPostBack="true" Height="150px" Width="400px" onblur="javascript:refreshUpdatePanel()"></asp:TextBox>