2009-08-03 66 views
1

我有一个更新面板,其中包含一个中继器,该中继器将用户控件调用到每一行中。当我单击用户控件内的按钮时,只有当我完全重新加载页面时,页面才会完全不刷新。如何从用户控件的按钮点击更新面板刷新?从usercontrol中更新父级更新面板

回答

0

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

3

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

有当UpdatePanel的更新,影响三两件事:

  1. UpdateMode属性 - 这需要两个可能的值,AlwaysConditional
    • 如果它被设置为Always那么页面的任何回发将导致UpdatePanel更新。
    • 如果设置为Conditional,那么UpdatePanel仅在UpdatePanel的Update方法被调用时或UpdatePanel的某个触发器执行回发时更新。
  2. Triggers proroperty - 定义,其控制会导致在UpdatePanel时UpdateMode设置为Conditional进行更新。
  3. ChildrenAsTriggers属性 - 这是一个布尔值,它确定UpdatePanel的子控件是否被自动视为触发器,而不必将其添加到Triggers集合中。

因为你的按钮是在用户控件也不会是容易的控件添加到收藏Triggers或有按钮呼吁,是不是该用户控件内UpdatePanel的Update方法。

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

2

有时用Triggers解决这个问题并不方便。所以这里有另一种奇特的方法,即使从你的用户控件也可以使用,而不需要任何关于更新面板的知识:

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