【问题标题】:updatepanel working in terms of request and responseupdatepanel 根据请求和响应工作
【发布时间】:2012-09-12 14:59:32
【问题描述】:

我有两组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 的请求

有人能解释一下吗..

【问题讨论】:

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


    【解决方案1】:

    好的..这里的事情是,即使您在页面中有一个 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 之外的内容..

    【讨论】:

    • 我发现通过UpdateMode="Conditional"...UpdateMode 在请求和响应中没有区别,当有多个UpdatePanel 时,如果我没记错的话。
    • 不,事实并非如此。如果您不想在调用某些控件时更新面板,请将其设置为条件。在这种情况下,您不希望在 btn2 为单击..在这种情况下它很有帮助..您是否在页面上设置了 EnablePartialRendering="true"..您是否在浏览器的控制台部分看到任何错误..
    • btn2被点击时,无论你做什么,它都会将整个页面回发到服务器并且整个页面被刷新..并且默认情况下EnablePartialRenderingtrue..
    猜你喜欢
    • 1970-01-01
    • 2014-12-26
    • 1970-01-01
    • 2021-08-08
    • 2018-10-12
    • 2019-12-14
    • 1970-01-01
    • 2021-09-04
    • 2021-07-15
    相关资源
    最近更新 更多