带文本框控件的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>

带文本框控件的AJAX触发器

您应该在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>