我有一个更新面板,其中包含一个转发器,可以将用户控件调用到每一行。当我单击用户控件内的按钮时,页面根本不刷新,只有当我完全重新加载它时。如何从用户控件的按钮单击更新更新面板?
答案 0 :(得分:3)
Phairoh是correct您的按钮需要成功导致PostBack。
更新UpdatePanel时会影响三件事:
UpdateMode
属性 - 这需要两个可能的值,Always
和Conditional
。
Always
,则页面的任何回发都会导致UpdatePanel更新。Conditional
,则仅在调用UpdatePanel的Update
方法或UpdatePanel的其中一个触发器进行回发时更新UpdatePanel。Triggers
proroperty - 定义哪些控件会在UpdateMode
设置为Conditional
时更新UpdatePanel。ChildrenAsTriggers
属性 - 这是一个布尔值,用于确定UpdatePanel的子控件是否自动被视为触发器,而无需添加到Triggers
集合。因为您的按钮位于UserControl中,所以将控件添加到Triggers
集合或让按钮调用UpdatePanel上不在UserControl内部的Update方法是不容易的。
因为您的UpdatePanel包含UserControl,您最好的选择是启用ChildrenAsTriggers
。如果这不起作用,请尝试将UpdateMode
属性设置为Always
。如果这仍然不起作用,则Phairoh可能是correct,而您的按钮不会回发。
答案 1 :(得分:2)
有时使用触发器解决这个问题并不是很方便。因此,这是另一种奇特的方法,甚至可以在用户控件中使用,而无需了解更新面板:
var scriptManager = ScriptManager.GetCurrent(Page);
if (scriptManager != null)
scriptManager.RegisterPostBackControl(SomeControlID);
答案 2 :(得分:0)
您确定用户控件上的按钮是否正在尝试回发?我有一段时间没有使用更新面板(我实际上建议避免使用它们)但是如果我没记错的话,只要在其中进行回发,它们就会刷新。这意味着您的按钮必须是Asp:Buttons(或类似的导致回发的控件),并且没有某种类型的javascript,不允许其操作继续(例如返回false)。