2011-07-13 56 views
-5

我有一個用戶控件的問題。我有三個用戶控件:Usercontrol1,Usercontrol2Usercontrol3Usercontrol3有一個「提交」按鈕。這些控件嵌套如下:兒童用戶控制按鈕單擊不起作用?

 
    default.aspx 
    UserControl1 
     UserControl2 
     UserControl3 
      Submit Button 

當我運行我的應用程序,在網頁上提交按鈕節目,但是當我點擊這個按鈕,則不會引發Click事件。爲什麼是這樣?

+0

可否請你發佈你的表格一些設計? –

+1

您需要顯示代碼。 – ysrb

+1

你給我們沒有任何代碼,沒有enoug信息等,等等-1。請再試一次 –

回答

1

這很難說,因爲你還沒有發佈任何代碼,但也許您遇到的問題是,你的事件處理程序可以default.aspx.cs的代碼隱藏的內部,而不是被定義UserControl3.ascx.cs。你的default.aspx頁面沒有任何控件的內部知識。這是封裝的原則; default.aspx只能看到自己成員的公共接口,具體是UserControl1

我不知道你控制的目的,但你的結構可能無法從組件化的角度來看是有意義的。如果邏輯上屬於頁面,將提交按鈕放在頁面中可能更有意義。如果它確實有意義,那麼你可能想要遵循這種模式:向你的UserControl添加事件,以便它們暴露給包含它們的頁面/控件。例如:

public class UserControl1 
{ 
    public event EventHandler Submit 
    { 
     add { this.UserControl2.Submit += value; } 
     remove { this.UserControl2.Submit -= value; } 
    } 
} 

public class UserControl2 
{ 
    public event EventHandler Submit 
    { 
     add { this.UserControl3.Submit += value; } 
     remove { this.UserControl3.Submit -= value; } 
    } 
} 

public class UserControl3 
{ 
    public event EventHandler Submit 
    { 
     add { this.SubmitButton.Click += value; } 
     remove { this.SubmitButton.Submit -= value; } 
    } 
} 

採用這種設置,頁面可以處理你的UserControl1Submit事件。另一個更哈克的選擇,在我看來,是通過遍歷其子附加到你的網頁代碼提交按鈕的事件處理程序:

protected void OnLoad(object sender, EventArgs args) 
{ 
    UserControl1.UserControl2.UserControl3.SubmitButton.Click += OnSubmit; 
} 

protected void OnSubmit(object sender, EventArgs args) 
{ 
}