展示与展示从其他UpdatePanel回发后刷新UpdatePanel?

时间:2011-02-10 18:58:28

标签: c# asp.net 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为'ctl00_ctl11_DetailUpdatePanel'的UpdatePanel。如果它是动态更新的,那么它必须在另一个UpdatePanel内。

如果我的面板设置为自动,我希望如此。我觉得有些东西我不太喜欢这里。如果回发源自UpdatePanel内部,即使它设置为Conditional,该控件是否以某种方式绑定到UpdatePanel?有没有办法让asp.net“突破”给定的UpdatePanel,但是没有执行完整的回发?

这个b / c这些都曾经在同一个UpdatePanel中,但我需要将它们分开,因为我必须在“细节”面板中实现某些情况下阻止提交的逻辑,如果它们很难做到'在同一个UpdatePanel中。我怀疑如果我一直都渲染它们会起作用,并使用CSS来隐藏我不希望用户在给定模式下操作的那个。或者,将它们放在外部UpdatePanel中。但这似乎浪费了很多带宽,我希望有一种方法可以让我按照自己想要的方式工作。

2 个答案:

答案 0 :(得分:0)

将导致回发的第一个面板上的Button关联为另一个面板上的Asynctrigger

答案 1 :(得分:0)

当ASP.NET从更新面板收到请求时,其响应仅包括该面板的内容(以及视图状态和事件验证数据)。来自MSDN上的Partial-Page Rendering Overview

  

异步回发表现很多   像一个同步回发。一切   服务器页面生命周期事件发生,   并查看状态和表单数据   保存。但是,在渲染中   阶段,只有内容   UpdatePanel控件被发送到   浏览器。页面的其余部分仍然存在   不变。

(我还建议您自己在Firebug,Fiddler或其他类似工具中查看请求和响应。)

如果您致力于使用更新面板(而不是jQuery或其他客户端库),则必须将列表和详细信息放在单个面板中。