2009-08-21 63 views
0

Greetings All, 我有兩個ascx加載在aspx頁面的page-init事件中。控件1有一個單選按鈕列表,我希望控件2上的下拉列表響應它的selectedIndex更改。到目前爲止,我在SelectedIndexChange處理程序上調用RaiseBubbleEvent,並傳遞一個控件引用和commandArgs。然後在aspx我重寫OnBubbleEvent,我能夠接收控制參考和commandArgs。我的問題是如何將這些信息傳遞給Control 2.頁面不知道控件,因爲它們是動態加載的並添加到aspx中的asp:PlaceHolders中。我需要控制2來知道哪個單選按鈕被選中,所以我可以更改控件2下拉的數據源。有沒有人有任何這樣的例子嗎?任何指針或提示將不勝感激。在聖地亞哥ASP.NET如何動態加載用戶控件對彼此事件做出響應?

回答

0

感謝, 〜CK我不知道這是一個很好的解決方案,但它應該工作。爲控件2中的事件創建一個處理程序,並有一些方法可以訪問該處理程序的委託。然後,將控件1的事件連接到由該訪問器返回的處理程序。非常粗略例如:

在控制1:

public event SelectedIndexChanged; 

public void PageLoad() 
{ 
    radioList.SelectedIndexChanged += new EventHandler(RadSelectedIndexChanged); 
} 

public void RadSelectedIndexChanged(object sender, EventArgs args) 
{ 
    SelectedIndexChanged(sender, args); 
} 

在aspx頁面:

control1.SelectedIndexChanged += control2.GetHandler(); 

在控制2:

public EventHandler GetHandler() 
{ 
    return new EventHandler(HandleEvent); 
} 

protected void HandleEvent(object sender, EventArgs args) 
{ 

} 
0

好,控制2應真的只是被連接到另一個控件的'SelectedIndexChanged'事件。這是不可能的,出於某種原因?

0

既然你提到頁面沒有意識到這些控件,最好的辦法是讓Control1類使用I-want-to-listen-to-your-event setter方法公開接口。

Control2應該搜索其父(頁面)的其他兄弟控件實現接口,然後調用傳遞引用傳遞給它的處理程序。

通過這種方式,控件可以放在任何其他頁面上而不需要修改。

編輯:

新增下載一個sample web application。源代碼被髮布到公共領域。

+0

我喜歡這個想法。我如何使用I-To-listen-to-your-event setter方法創建接口?當你說「setter」時,你的意思是一個屬性{set;}以及該方法返回什麼類型。我很抱歉,在編碼事件時,我有點新手。謝謝。 – Hcabnettek 2009-08-21 05:33:57

+0

@Kettenbach:增加了示例應用程序。 – devstuff 2009-08-21 12:00:01