updatepanel在请求和响应方面工作

时间:2012-09-12 14:59:33

标签: asp.net asp.net-ajax updatepanel

我有两组asp:TextBoxasp:Button控件,其中一组在更新面板中,另一组在外部..

    <asp:UpdatePanel runat="server">
        <ContentTemplate>
            <asp:Button Text="text" runat="server" ID="btn1"/>
            <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        </ContentTemplate>
    </asp:UpdatePanel>
    <asp:Button Text="text" runat="server" ID="btn2"/>
    <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

代码隐藏

    protected void Page_Load(object sender, EventArgs e)
    {
        TextBox1.Text = TextBox2.Text;
    }

现在我的问题是,Updatepanel究竟是如何工作的?

实际上我认为,在btn1点击时,只有UpdatePanel的内容会作为请求发送到服务器,而响应仅来自服务器到该更新面板。

因此,我在TextBox2中输入了一些文字并点击了btn1 ..但令人惊讶的是TextBox1文字已更改为TextBox2的文字。

然后我想,整个页面将作为请求发送到服务器,响应仅发送到该updatePanel并相应更新。

现在,我在Google Chrome开发者工具中检查了两个请求(即,来自btn1btn2的请求)..令我惊讶的是,Content-Length请求..

如果更新面板外有更多控件,那么来自Content-Length

的请求btn2会更多

有人可以对此有所启发..

1 个答案:

答案 0 :(得分:0)

好的..这里的事情是,即使页面中有UpdatePanel,当发生回发时,所有内容都会回发到服务器。这类似于没有UpdatePanel的普通页面。这就是你为UpdatePanel选择UpdateMode的原因......

UpdateMode =“始终” UpdateMode =“有条件”

因为你没有在这里设置任何东西,所以默认情况下它总是,因为整个页面都回发了...

要在添加UpdatePanel后查看您要查找的更改,您需要将其设置为条件并将元素添加为AsynPostbackTriggers ...

<asp:UpdatePanel runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btn1" />
    </Triggers>
    <ContentTemplate>
        <asp:Button Text="text" runat="server" ID="btn1"/>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </ContentTemplate>
</asp:UpdatePanel>
<asp:Button Text="text" runat="server" ID="btn2"/>
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>

现在,当您单击btn1时,只会回发UpdatePanel内的内容,并且可以在响应中看到。

如果单击btn2,则只会在响应中看到UpdatePanel外部的内容。