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: <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" /> 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)
有什么建议?谢谢.
你对 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 已更改它们 - 并且失败。
| 归档时间: |
|
| 查看次数: |
2497 次 |
| 最近记录: |