我有一個aspx頁面,我在佔位符中動態地添加了web用戶控件。並知道我有一個用戶控件取消按鈕,並點擊取消按鈕,我想加載其他用戶控制aspx頁面(佔位符)內。調用網頁用戶控件的父aspx頁面的功能
我該怎麼做,如果我在用戶控件中創建一個事件處理程序,然後成爲空。
感謝
我有一個aspx頁面,我在佔位符中動態地添加了web用戶控件。並知道我有一個用戶控件取消按鈕,並點擊取消按鈕,我想加載其他用戶控制aspx頁面(佔位符)內。調用網頁用戶控件的父aspx頁面的功能
我該怎麼做,如果我在用戶控件中創建一個事件處理程序,然後成爲空。
感謝
用戶控件永遠不應該對它所在的頁面有任何依賴。向控件添加事件並從「取消」按鈕事件處理程序中觸發它。
public event EventHandler CancelClicked;
protected Cancel_Click(object sender, EventArgs e)
{
if(CancelClicked != null)
{
CancelClicked(this, e);
}
}
從您的頁面訂閱控件的CancelClicked事件並執行其他用戶控件應執行的操作。你的父母aspx頁面上
public event EventHandler CancelClicked;
現在,這個方法:
+1關於緊耦合的評論。 – seanxe 2011-12-22 09:37:05
@Anders Abel我已經做到了這一點,在我的情況下,調試器從來沒有進入內部if(CancelClicked!= null) Cancellicked(this,e); } 此代碼因爲我的cancelclicked始終爲空 – 2011-12-22 09:47:51
將控件添加到頁面時,必須使用「OnCancelClicked」來訂閱事件處理程序。控制定義應該看起來像'
我認爲最好的方式實現這一目標將創造是當你需要它來溝通發射,然後在頁面,您可以訂閱這個事件的用戶控件的事件。
用戶控件
把這個在你的控制作爲事件變量。
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
}
此事件添加到您的用戶控件。
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);
}
}
這應該做的!
可以顯示一些代碼,用於將頁面動態添加到用戶控件的位置。 – Jamiec 2011-12-22 09:29:25
你的控件不應該有任何關於你的頁面的知識 - 這會在不應該有的地方產生緊密的耦合。 – Oded 2011-12-22 09:33:45