2011-02-10 86 views
1

我有一个页面有两个的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中。但是,这似乎是浪费了很多带宽,我希望有一种方法可以让我按照自己的方式工作。

回答

0

准引起其它面板上的回发作为Asynctrigger

+0

不应该手动控制工作是否一样?我有一种感觉,我会得到同样的错误。 – 2011-02-10 19:10:05

+0

我不这么认为,因为updatepanle只做了部分渲染,它甚至可能不会通过请求发送到另一个panle。 – XtremeBytes 2011-02-10 19:12:02

0

当ASP.NET从更新面板接收到一个请求,其响应仅包括面板的内容(加上视图状态和所述第一面板上的按钮事件验证数据)。从Partial-Page Rendering Overview MSDN上:

An asynchronous postback behaves much like a synchronous postback. All the server page life-cycle events occur, and view state and form data are preserved. However, in the rendering phase, only the contents of the UpdatePanel control are sent to the browser. The rest of the page remains unchanged.

(我还建议考虑看看萤火虫,提琴手,或其他类似工具的请求和响应自己。)

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