当我把" TextBox"使用ID控制" MessageTextBox" in" Triggers"在UpdatePanel中使用ID" UpdatePanel2",这个" TextBox" ID" MessageTextBox"不希望通过AJAX回发。 "按钮"使用ID控制" MessageButton"工作得很好,但是这个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>
当我把这个&#34; TextBox&#34;像这样控制所有工作,但我更喜欢触发器的其他方式(不像上面的代码那样工作的方式):
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:TextBox ID="MessageTextBox" runat="server" Height="150px" Width="400px"></asp:TextBox>
</ContentTemplate>
</asp:UpdatePanel>
答案 0 :(得分:0)
您应在EventName
中指定AsyncPostBackTrigger
:
<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>