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

时间:2011-06-02 13:05:35

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

我有两个更新面板(我们称之为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>

小组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>

有什么建议吗?感谢。

1 个答案:

答案 0 :(得分:3)

你在UpdatePanel上问得太多了:)

UpdatePanel无法使用2个并行请求。考虑进行一些ajax调用以获得结果。

为什么你会问,一个基本原因是每个页面只有一个视图状态。当你从A或B,UpdatePanel要求发送/获取数据时,那么视图状态必须改为一个新的观点。现在,当你问A的结果时,在你结束之前,你会问B的结果,你会得到2个不同的视图状态,其中一个会失败,因为在中间时间有变化。

ViewState不是唯一的想法,在每个更新面板中点击,页面回发所有输入发布到页面,A和B输入以及页面内的所有其余内容,这也是一个问题。例如,对此进行成像,使用输入A + B触发A UpdatePanel,然后在A结束之前,使用相同的输入触发B UpdatePanel。现在A,等待来自A + B的结果,相同和B,但是在中间时间A的A + B结果现在是不同的,因为B已经改变它们 - 并且失败了。