【发布时间】:2009-08-03 19:51:27
【问题描述】:
我有一个更新面板,其中包含一个将用户控件调用到每一行的中继器。当我单击用户控件内的按钮时,页面根本不会刷新,只有当我完全重新加载它时。如何通过用户控件的按钮单击刷新更新面板?
【问题讨论】:
标签: asp.net updatepanel controls
我有一个更新面板,其中包含一个将用户控件调用到每一行的中继器。当我单击用户控件内的按钮时,页面根本不会刷新,只有当我完全重新加载它时。如何通过用户控件的按钮单击刷新更新面板?
【问题讨论】:
标签: asp.net updatepanel controls
Phairoh 是correct,您的按钮需要成功地引起回发。
影响更新面板更新时间的三个因素:
UpdateMode 属性 - 这有两个可能的值,Always 和 Conditional。
Always,则页面的任何回发都会导致 UpdatePanel 更新。Conditional,则仅在调用 UpdatePanel 的 Update 方法或 UpdatePanel 的触发器之一执行回发时更新 UpdatePanel。Triggers 属性 - 定义当 UpdateMode 设置为 Conditional 时,哪些控件将导致更新面板更新。ChildrenAsTriggers 属性 - 这是一个布尔值,用于确定 UpdatePanel 的子控件是否自动被视为触发器,而无需添加到 Triggers 集合中。因为您的按钮位于 UserControl 中,所以将控件添加到 Triggers 集合或让按钮调用不在 UserControl 内的 UpdatePanel 上的 Update 方法并不容易。
因为您的 UpdatePanel 包含 UserControl,所以最好的办法是启用 ChildrenAsTriggers。如果这不起作用,请尝试将UpdateMode 属性设置为Always。如果这仍然不起作用,那么 Phairoh 可能是 correct 并且您的 Button 没有回发。
【讨论】:
有时使用触发器解决这个问题并不方便。所以这是另一种奇特的方法,甚至可以在您不了解更新面板的情况下从您的用户控件中使用:
var scriptManager = ScriptManager.GetCurrent(Page);
if (scriptManager != null)
scriptManager.RegisterPostBackControl(SomeControlID);
【讨论】:
您确定您的用户控件上的按钮正在尝试回发吗?我有一段时间没有使用更新面板(实际上我建议避免使用它们),但如果我没记错的话,只要在其中完成回发,它们就会刷新。这意味着您的按钮必须是 Asp:Buttons(或导致回发的类似控件),并且其上没有某种类型的 javascript,不允许其操作继续(例如 return false)。
【讨论】: