使用TextBox控件的AJAX触发器

时间:2013-02-09 14:40:40

标签: c# asp.net ajax triggers controls

当我把" 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>

1 个答案:

答案 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>