2012-04-26 51 views
0

假設我有tvo頁面,page1.ascx和page2.ascx。這兩個頁面都有代碼隱藏(分別爲page1.ascx.cs和page2.ascx.cs)。從不同的代碼隱藏中更改ascx內容

因此,頁面1和頁面2在瀏覽器中同時呈現,並排顯示。

現在page1.ascx有一個ListView,它的代碼隱藏有一個方法來填充它(PopulateListbox())。如何從page2.ascx代碼隱藏中調用PopulateListbox()?

page1 p1 = new page1(); 
p1.PopulateListbox(); 

...不起作用,findController找到listbox的ID返回一個空值。

任何指導將有很大的幫助,謝謝。

+0

請確認PopulateListbox()是否公開。 – userGS 2012-04-26 09:34:27

回答

2
var p1 = this.Page.FindControl("page1Id") as page1; 
if (p1 != null) 
    p1.PopulateListbox(); 

雖然你可以用不同的方式做到這一點。在第一個控件上爲特定操作創建一個事件。在父頁面添加事件處理程序和事件處理程序將包含以下調用

p1.PopulateListbox(); 

Here一個鏈接,如何創建自己的事件

+1

在第一個示例中,p1始終爲空。我會繼續嘗試使用事件處理程序。 – hallizh 2012-04-26 11:16:14

+0

你使用正確的ID嗎? – 2012-04-26 11:58:38

+1

是的,至少我認爲我是。無論如何,我認爲事件實現是一種「更清潔」的方式來實現這一點,並且這很成功。謝謝! – hallizh 2012-04-26 21:21:48

0

直接從另一個用戶控件訪問一個用戶控制方法沒有按」聽起來像一個偉大的設計。

您可以做的是在您的page2.ascx中創建一個委託,當您的其他用戶控件的刷新操作需要發生時被調用。

您的aspx頁面訂閱該委託並調用page1.ascx PopulateListBox方法。

因此,您的頁面編排了兩個用戶控件之間的交互,他們彼此不知道。