两个UpdatePanel并行工作,一个不更新

Hon*_*ner 5 asp.net updatepanel asp.net-ajax

我有两个更新面板(让我们称之为A和B).在A中,我有一个简单的复选框.AutoPostback设置为true.当您检查(或取消选中)时,它将启用/禁用同一UpdatePanel中的简单下拉列表.

UpdatePanel B中有一个长时间运行的进程.它会触发创建下拉列表的请求,构建需要将近2分钟.如果我加载页面并且不接触任何内容,则在大约2分钟后构建下拉列表并完美呈现.但是,如果在那两分钟内我决定检查我的复选框(并导致面板A的部分回发),则更新面板B永远不会被渲染.在调试时,我发现它正在成功完成检索,但实际的面板永远不会刷新以显示控件.

我尝试在面板B上使用UpdateMode = Conditional(以确保它不会受到面板A的干扰)并且它产生相同的结果.我已经验证了B.Update()也被调用了.

编辑

小组A:

<asp:UpdatePanel ID="upMailScrub" runat="server">
    <ContentTemplate>
        <asp:Button ID="btnAnalyzeLaunch" runat="server" onclick="btnAnalyzeLaunch_Click" Text="Analyze Launch" style="display: none" />    
        <table>
            <tr>
                <td><asp:CheckBox ID="cbxScrub" runat="server" Checked="true" 
                        oncheckedchanged="cbxScrub_CheckedChanged" AutoPostBack="True" /></td><td><label for="cbxScrub">Scrub this campaign</label></td>
                <td style="padding-left: 10px">
                    Vendor:&nbsp;&nbsp;<asp:DropDownList ID="ddlScrubVendor" runat="server">
                        <asp:ListItem Text="LexisNexis" Value="LexisNexis" />
                    </asp:DropDownList>
                </td>
            </tr>
        </table>
    </ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

小组B:

<asp:UpdatePanel ID="upDdlCampaigns" runat="server" UpdateMode="Conditional">
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnAnalyzeLaunch" EventName="Click" />
    </Triggers>
    <ContentTemplate>
        <asp:HiddenField id="hidAction" runat="server" />
        <asp:Panel ID="pnlPleaseWait" runat="server"><img src="style/images/PleaseWait.gif" />&nbsp;Please wait while the Five9 Campaigns are retrieved...</asp:Panel>
        <asp:DropDownList ID="ddlCampaigns" Visible="false" runat="server" class="required"
            AutoPostBack="True" OnSelectedIndexChanged="ddlCampaigns_SelectedIndexChanged" />
        <asp:Button ID="btnRefreshDDL" runat="server" onclick="btnRefreshDDL_Click" style="display: none" />
    </ContentTemplate>
</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

有什么建议?谢谢.

Ari*_*tos 3

你对 UpdatePanel 要求太多了:)

UpdatePanel 无法以这种方式处理 2 个并行请求。考虑进行一些 ajax 调用来获取结果。

为什么您可能会问,一个基本原因是每个页面只有一种视图状态。当您从 A 或 B、UpdatePanel 请求发送/获取数据时,视图状态必须更改为新的视图状态。现在,当你向 A 询问结果时,在结束之前,你向 B 询问结果,你将得到 2 个不同的视图状态,其中一个会失败,因为中间发生了变化。

ViewState并不是唯一的想法,在每次更新面板点击时,页面都会post回所有输入post到页面,A和B输入以及页面内的所有其他输入,这也是一个问题。例如,想象一下,您使用输入 A+B 触发 A UpdatePanel,然后在 A 结束之前,您使用相同的输入触发 B UpdatePanel。现在,A 正在等待 A+B 的结果,与 B 相同,但在中间,A 的 A+B 结果现在不同,因为 B 已更改它们 - 并且失败。