【问题标题】:Update parent updatepanel from within usercontrol从用户控件中更新父更新面板
【发布时间】:2009-08-03 19:51:27
【问题描述】:

我有一个更新面板,其中包含一个将用户控件调用到每一行的中继器。当我单击用户控件内的按钮时,页面根本不会刷新,只有当我完全重新加载它时。如何通过用户控件的按钮单击刷新更新面板?

【问题讨论】:

    标签: asp.net updatepanel controls


    【解决方案1】:

    Phairohcorrect,您的按钮需要成功地引起回发。

    影响更新面板更新时间的三个因素:

    1. UpdateMode 属性 - 这有两个可能的值,AlwaysConditional
      • 如果将其设置为Always,则页面的任何回发都会导致 UpdatePanel 更新。
      • 如果将其设置为 Conditional,则仅在调用 UpdatePanel 的 Update 方法或 UpdatePanel 的触发器之一执行回发时更新 UpdatePanel。
    2. Triggers 属性 - 定义当 UpdateMode 设置为 Conditional 时,哪些控件将导致更新面板更新。
    3. ChildrenAsTriggers 属性 - 这是一个布尔值,用于确定 UpdatePanel 的子控件是否自动被视为触发器,而无需添加到 Triggers 集合中。

    因为您的按钮位于 UserControl 中,所以将控件添加到 Triggers 集合或让按钮调用不在 UserControl 内的 UpdatePanel 上的 Update 方法并不容易。

    因为您的 UpdatePanel 包含 UserControl,所以最好的办法是启用 ChildrenAsTriggers。如果这不起作用,请尝试将UpdateMode 属性设置为Always。如果这仍然不起作用,那么 Phairoh 可能是 correct 并且您的 Button 没有回发。

    【讨论】:

      【解决方案2】:

      有时使用触发器解决这个问题并不方便。所以这是另一种奇特的方法,甚至可以在您不了解更新面板的情况下从您的用户控件中使用:

          var scriptManager = ScriptManager.GetCurrent(Page);
          if (scriptManager != null) 
              scriptManager.RegisterPostBackControl(SomeControlID);
      

      【讨论】:

        【解决方案3】:

        您确定您的用户控件上的按钮正在尝试回发吗?我有一段时间没有使用更新面板(实际上我建议避免使用它们),但如果我没记错的话,只要在其中完成回发,它们就会刷新。这意味着您的按钮必须是 Asp:Buttons(或导致回发的类似控件),并且其上没有某种类型的 javascript,不允许其操作继续(例如 return false)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多