0

我有 2 组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 开发者工具中的两个请求(即 Request frombtn1和)。再次令我惊讶的是,请求btn2有所不同。Content-Length

如果更新面板之外有更多控件,那么Content-Length来自的请求会更多btn2

有人可以对此有所了解吗..

4

1 回答 1

0

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

它是UpdateMode="Always"UpdateMode="Conditional"

因为您没有在此处设置任何内容,所以默认情况下始终为“始终”,因此整个页面都在回发...

要在添加 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 之外的内容。

于 2012-09-12T20:24:24.973 回答