从usercontrol中更新父更新面板

时间:2009-08-03 19:51:27

标签: asp.net updatepanel controls

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

3 个答案:

答案 0 :(得分:3)

Phairohcorrect您的按钮需要成功导致PostBack。

更新UpdatePanel时会影响三件事:

  1. UpdateMode属性 - 这需要两个可能的值,AlwaysConditional
    • 如果设置为Always,则页面的任何回发都会导致UpdatePanel更新。
    • 如果设置为Conditional,则仅在调用UpdatePanel的Update方法或UpdatePanel的其中一个触发器进行回发时更新UpdatePanel。
  2. Triggers proroperty - 定义哪些控件会在UpdateMode设置为Conditional时更新UpdatePanel。
  3. ChildrenAsTriggers属性 - 这是一个布尔值,用于确定UpdatePanel的子控件是否自动被视为触发器,而无需添加到Triggers集合。
  4. 因为您的按钮位于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)。