2009-04-29 34 views
1

我正在做一個頁面的asp.net應用程序。在這個頁面中,我定義了一個usercontrol。這個用戶控件也有一個菜單(三個按鈕)和三個用戶控件。根據點擊的按鈕,三個用戶控件中的一個變爲可見true或false。如何在嵌套的usercontrols中模擬回傳?

在這三個用戶控件中,我有一個按鈕和一條消息,當點擊菜單按鈕時,我想顯示消息「它不是回發」,並且當點擊usercontrol的按鈕時,消息將會是「是的,它是回發!!!」。

問題是,使用屬性「IsPostBack」的用戶控件或頁面的消息將永遠不會「回發」,因爲菜單點擊按鈕顯示嵌套的用戶控件。

這是頁面的結構:

page 
    parent usercontrol 
    menu 
    nested usercontrol 1 
     message 
     button 
    nested usercontrol 2 
    nested usercontrol 3 

我知道它可以使用ViewState中進行,但是,有一種方法來模擬IsPostBack屬性或知道什麼時候是真正的用戶控件回發?

謝謝。

回答

0

我有解決這個問題的辦法。當元素觸發事件發送到Request.Form集合中的服務器時,所以我在嵌套的usercontrols中創建了一個屬性,用於檢查Request.Form集合中是否存在子控件(在usercontrol中定義):

public bool IsUserControlPostBack 
    { 
     get 
     { 
      foreach (Control c in Controls) 
       foreach(string key in Page.Request.Form.AllKeys) 
        if(c.ClientID == key.Replace('$','_')) 
         return true; 

      return false; 
     } 
    } 

此代碼可以是usercontrol的一個屬性,或者如果它被調用了很多次,則它是在usercontrol的OnInit事件上設置的變量。