2011-12-22 97 views
1

我有一個aspx頁面,我在佔位符中動態地添加了web用戶控件。並知道我有一個用戶控件取消按鈕,並點擊取消按鈕,我想加載其他用戶控制aspx頁面(佔位符)內。調用網頁用戶控件的父aspx頁面的功能

我該怎麼做,如果我在用戶控件中創建一個事件處理程序,然後成爲空。

感謝

+0

可以顯示一些代碼,用於將頁面動態添加到用戶控件的位置。 – Jamiec 2011-12-22 09:29:25

+2

你的控件不應該有任何關於你的頁面的知識 - 這會在不應該有的地方產生緊密的耦合。 – Oded 2011-12-22 09:33:45

回答

6

用戶控件永遠不應該對它所在的頁面有任何依賴。向控件添加事件並從「取消」按鈕事件處理程序中觸發它。

public event EventHandler CancelClicked; 

protected Cancel_Click(object sender, EventArgs e) 
{ 
    if(CancelClicked != null) 
    { 
    CancelClicked(this, e); 
    } 
} 

從您的頁面訂閱控件的CancelClicked事件並執行其他用戶控件應執行的操作。你的父母aspx頁面上

public event EventHandler CancelClicked; 

現在,這個方法:

+0

+1關於緊耦合的評論。 – seanxe 2011-12-22 09:37:05

+0

@Anders Abel我已經做到了這一點,在我的情況下,調試器從來沒有進入內部if(CancelClicked!= null) Cancellicked(this,e); } 此代碼因爲我的cancelclicked始終爲空 – 2011-12-22 09:47:51

+1

將控件添加到頁面時,必須使用「OnCancelClicked」來訂閱事件處理程序。控制定義應該看起來像'' – 2011-12-22 09:52:45

2

我認爲最好的方式實現這一目標將創造是當你需要它來溝通發射,然後在頁面,您可以訂閱這個事件的用戶控件的事件。

用戶控件

把這個在你的控制作爲事件變量。

public event EventHandler CancelRequested; 

然後在取消按鈕單擊事件:

CancelRequested(this, new CommandEventArgs("CancelClicked", SomeVariable)); 

你的頁面(或母)

然後訂閱像這樣父頁面時(當你動態地添加它在):

ctrlYourControl.CancelRequested += new EventHandler(ctrlYourControl_CancelRequested); 

聲明事件處理程序:

void ctrlYourControl_CancelRequested(object sender, EventArgs e) 
{ 
    // display other user control 
} 
+0

值得注意的是,當您鍵入ctrlYourControl.CancelRequested時,您可以按Tab選項卡,其餘的將自動完成。 – ThePower 2011-12-22 09:41:49

+0

我已經做到了這一點,在我的情況下,當調試到達CancelRequested(這個,新的CommandEventArgs(「CancelClicked」,SomeVariable)); 它給null參考 – 2011-12-22 09:43:07

+0

+1使用CommandEventArgs傳遞一些有用的信息。 – iMatoria 2012-02-06 12:54:28

2

此事件添加到您的用戶控件。

public void OnCancelClicked (object sender, EventArgs data) 
{ 
    // do your stuffs like loading other controls and 
    // whatever when event fired 
} 

當你動態加載用戶控件,補充一點:

var someControl = LoadControl(@"~\SomeControl.ascx") as SomeControl; 
someControl.CancelClicked += new EventHandler(OnCancelClicked); 

並在您的用戶控件:

public void btnCancel_Click(object sender, EventArgs e) 
{ 
    if(CancelClicked != null) 
    { 
     CancelClicked(this, e); 
    } 
} 

這應該做的!

相關問題