2009-08-03 69 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);