webforms 所有执行异步回发的子节点,即使 updatemode 设置为条件

Posted

技术标签:

【中文标题】webforms 所有执行异步回发的子节点,即使 updatemode 设置为条件【英文标题】:webforms all children performing async postback even when updatemode set to conditional 【发布时间】:2021-08-28 21:39:44 【问题描述】:

我有一个更新面板,其中 UpdateMode 设置为条件,而 childrenastriggers 设置为 false,但面板中的所有控件都在执行异步回发...

   <asp:ScriptManager ID="ScriptManager1" runat="server" />

    <asp:UpdateProgress ID="pnlUpdateProgress" DisplayAfter="1" runat="server">
        <ProgressTemplate>
            Update in progress...
        </ProgressTemplate>
    </asp:UpdateProgress>
    <asp:UpdatePanel runat="server" ID="pnlUpdate" UpdateMode="Conditional" ChildrenAsTriggers="false">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnDoNothing" EventName="Click" />
    </Triggers>
    <ContentTemplate>
    <div runat="server" clientidmode="Static" id="divList">
        <asp:Button runat="server" ID="btnDoNothing" Text="Do nothing" OnClick="Unnamed_Click" />
        <asp:Button runat="server" ID="btnSync" Text="Sync" OnClick="btnSync_Click" />
        <br />
        <div class="items_bought_table">
            <table style="width: 100%; padding-bottom:24px;">
                <thead>
                    <tr>
                        <th style="text-align: left;">Description</th>
                        <th></th>
                    </tr>
                </thead>
                <tbody>
                    <asp:Literal runat="server" ID="litList" />
                </tbody>
            </table>
        </div>
        
    <br />
    <asp:Literal runat="server" ID="litDebugText" />
    </div>

 <div runat="server" clientidmode="Static" id="divEdit">
    <asp:HiddenField runat="server" ID="txtEditID" />

        <asp:Literal ID="litEditList" runat="server">

        </asp:Literal>
        
        <ul>
        <li class="full_width pt_10">
            Your Product: <em><asp:Literal runat="server" ID="litEditProductName" /></em>
        </li>
    </ul>

 </div>

    </ContentTemplate>
</asp:UpdatePanel>

这里 btnSync 和 btnDoNoting 都在执行异步回发,我希望只有 btnDoNothing 可以异步回发,btnSync 应该执行完整的回发

【问题讨论】:

【参考方案1】:

AsyncPostBackTrigger 只设置面板外的控件。

页面上的控件更新面板之外可以通过将UpdatePanel 控件定义为触发器来刷新它们。触发器是使用 AsyncPostBackTrigger 元素定义的。

控制回发总是回发。我认为ChildrenAsTriggers="false" 不会阻止回发 - 它只会阻止内容更新。

【讨论】:

【参考方案2】:

正如@wazz 在他们的回答中所说,这是更新面板中的正常行为。要进行全面回击,您需要按照this 问题的答案中记录的“PostBackTrigger”。

<asp:UpdatePanel ID="UpdatePanel1" UpdateMode="Conditional" runat="server">
  <ContentTemplate>
      ...
  </ContentTemplate>
  <Triggers>
      <asp:PostBackTrigger ControlID="myFullPostBackControlID" />
  </Triggers>
</asp:UpdatePanel>

【讨论】:

以上是关于webforms 所有执行异步回发的子节点,即使 updatemode 设置为条件的主要内容,如果未能解决你的问题,请参考以下文章

在异步回发的更新面板中禁用按钮

在执行异步回发页面时会丢失 gridviewscroll 脚本?

如何执行用于提高回发的 javascript 代码

没有回发的按钮?

浏览器回发的时候ASP.NET服务器如何找回所有控件的状态?

在jQuery中延迟/超时回发的方法?