【问题标题】:Display & refresh an UpdatePanel after a postback from a different UpdatePanel?从不同的 UpdatePanel 回发后显示并刷新 UpdatePanel?
【发布时间】: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


    【解决方案1】:

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

    【讨论】:

    • 手动控制不应该也一样吗?我感觉我会遇到同样的错误。
    • 我不认为,因为 updatepanle 只进行部分渲染,它甚至可能不会通过其他面板发送请求。
    【解决方案2】:

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

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

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

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

    【讨论】:

    • 显然我在阅读错误消息时遇到问题...答案一直都在那里:...那么它必须在另一个 UpdatePanel 中。。我不会说我致力于使用 UpdatePanels,并且我尽可能避免使用它们,而是在正确的情况下使用正确的工具。不过,我已经在使用 jQuery 进行一些验证和可视化元素,但是呈现表单的逻辑非常复杂,我没有兴趣在客户端上复制我的对象模型来避免 UpdatePanel!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多