我有一个页面有两个的UpdatePanel:从不同的UpdatePanel回发后显示并刷新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找到的UpdatePanel' ctl00_ctl11_DetailUpdatePanel”。如果它正在动态更新,那么它必须在另一个UpdatePanel中。
我期望这个,如果我的面板被设置为自动。我觉得我还没有到达这里。如果回发源于UpdatePanel内部,即使它设置为有条件,该控件是否与该UpdatePanel绑定?有没有办法让asp.net“爆发”给定的UpdatePanel,但不执行完整的回发?
这就是B/C这两个过去都在同一个UpdatePanel中,但我需要将它们分开,因为我必须在Details面板中实现逻辑来阻止某些情况下的提交,这将很难做到他们在同一个UpdatePanel中。我怀疑它会工作,如果我一直渲染它们,并且使用CSS来隐藏我不希望用户在给定模式下操作的那个。或者,也可以将它们都放在外部UpdatePanel中。但是,这似乎是浪费了很多带宽,我希望有一种方法可以让我按照自己的方式工作。
不应该手动控制工作是否一样?我有一种感觉,我会得到同样的错误。 – 2011-02-10 19:10:05
我不这么认为,因为updatepanle只做了部分渲染,它甚至可能不会通过请求发送到另一个panle。 – XtremeBytes 2011-02-10 19:12:02