【发布时间】:2011-02-10 18:58:27
【问题描述】:
我有一个包含两个 UpdatePanel 的页面:
<asp:UpdatePanel id="ListUpdatePanel" runat="server" UpdateMode="conditional">
<ContentTemplate>
<asp:ListView ... </asp:ListView>
</ContentTemplate>
</asp:UpdatePanel>
<asp:UpdatePanel id="DetailUpdatePanel" runat="server" UpdateMode="conditional">
..
</asp:UpdatePanel>
第一个面板的 ListView 中有回发控件。需要发生的是当页面从 ListView 捕获事件时,页面需要切换模式。代码应显示然后更新第二个面板。命令事件将导致属性PageMode 设置为编辑,然后:
protected override void OnPreRender(EventArgs e)
{
ListPanel.Visible = PageMode == PageModes.List;
EditPanel.Visible = PageMode == PageModes.Edit;
if (PageMode == PageModes.Edit)
{
EditUpdatePanel.Update();
}
else
{
ListUpdatePanel.Update();
}
base.OnPreRender(e);
}
但它不起作用,我收到此错误:ScriptResource.axd:868Uncaught Sys.InvalidOperationException: 找不到 ID 为“ctl00_ctl11_DetailUpdatePanel”的 UpdatePanel。如果它是动态更新的,那么它必须在另一个 UpdatePanel 中。
如果我的面板设置为自动,我会预料到这一点。我觉得有些东西我不太明白。如果回发源自 UpdatePanel 内部,即使它设置为 Conditional,该控件是否以某种方式与该 UpdatePanel 相关联?有没有办法让 asp.net “突破”给定的 UpdatePanel,但不执行完整的回发?
这是 b/c 这两个曾经在同一个 UpdatePanel 中,但我需要将它们分开,因为我必须实现逻辑来阻止在某些情况下从详细信息面板提交,如果他们很难做到这一点'在同一个更新面板中。我怀疑如果我一直渲染它们,并使用 CSS 隐藏我不希望用户在给定模式下操作的那个,它会起作用。或者,将它们都放在外部 UpdatePanel 中。但这似乎浪费了很多带宽,我希望有办法让它按我想要的方式工作。
【问题讨论】:
标签: c# asp.net updatepanel