我有一个包含两个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中,但我需要将它们分开,因为我必须在“细节”面板中实现某些情况下阻止提交的逻辑,如果它们很难做到'在同一个UpdatePanel中。我怀疑如果我一直都渲染它们会起作用,并使用CSS来隐藏我不希望用户在给定模式下操作的那个。或者,将它们放在外部UpdatePanel中。但这似乎浪费了很多带宽,我希望有一种方法可以让我按照自己想要的方式工作。
答案 0 :(得分:0)
将导致回发的第一个面板上的Button关联为另一个面板上的Asynctrigger
答案 1 :(得分:0)
当ASP.NET从更新面板收到请求时,其响应仅包括该面板的内容(以及视图状态和事件验证数据)。来自MSDN上的Partial-Page Rendering Overview:
异步回发表现很多 像一个同步回发。一切 服务器页面生命周期事件发生, 并查看状态和表单数据 保存。但是,在渲染中 阶段,只有内容 UpdatePanel控件被发送到 浏览器。页面的其余部分仍然存在 不变。
(我还建议您自己在Firebug,Fiddler或其他类似工具中查看请求和响应。)
如果您致力于使用更新面板(而不是jQuery或其他客户端库),则必须将列表和详细信息放在单个面板中。