0

当我将 ID 为“MessageTextBox”的“TextBox”控件放入 ID 为“UpdatePanel2”的 UpdatePanel 的“触发器”中时,这个 ID 为“MessageTextBox”的“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>
4

1 回答 1

0

您应该EventName在您的AsyncPostBackTrigger:

<asp:AsyncPostBackTrigger ControlID="MessageTextBox" EventName="TextChanged" />

只有失去焦点时,TextBox 才会触发回发。

或者,您可以使用ScriptManager.RegisterAsyncPostBackControl方法注册您的文本框Page_Load

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>
于 2013-02-09T14:51:18.993 回答