2012-04-17 47 views
1

我有一個用戶控件是在另一個用戶控件內,我想要做的是在某個進程運行後,找到父按鈕控件並運行OnClick事件。usercontrol在父母找到按鈕控制

用戶控件1

protected void btnReload_Click(object sender, EventArgs e) 
{ 
    //reloads data 
} 

用戶控件2(內嵌在用戶控件1)

protected void btnSave_Click(object sender, EventArgs e) 
{ 
    Button btnReload = (Button)Parent.FindControl("btnReload"); 
    //here fire the btnReload onclick even 
} 

這是不是我拿recomendations最好的辦法,因爲我要拉我的頭髮點在此。我這樣做的原因是因爲我有8個頁面都需要創建一個新用戶,所以我想使用1個用戶控件,但是用新創建的用戶重新加載他們所在的頁面。

回答

1

有兩種方法可以做到這一點:

1.在服務器端。

你想要做的是體系明智錯誤,孩子不應該試圖在父母中找到控制,也不應該父母。因此,子控件可以有一個自定義事件,父母可以註冊它,你可以在子控件的按鈕點擊事件上觸發該事件。

這裏有一篇文章,讓你開始:http://codebetter.com/brendantompkins/2004/10/06/easily-raise-events-from-asp-net-ascx-user-controls/

這也被這裏討論:How do you determine when a button is clicked in the child on the parent - ASP.NET

2.客戶端:

使用jQuery,你可以捕捉孩子控制的按鈕點擊事件,並從那裏你可以觸發父母的按鈕的點擊。您可以使用隱藏變量共享父按鈕的ID。

+0

好吧,這是工作就像我需要它,但有沒有辦法通過事件參數傳遞一個字符串值從usercontrol回aspx? – Andres 2012-04-17 21:01:31

+0

是的。如果你看看代碼更新的例子,他們有一個從EventArgs類繼承的類TabClickEventArgs。只要遵循這個類,無論你想傳遞什麼值,爲它創建一個屬性,在觸發事件之前設置它,父類應該得到它。 – 2012-04-17 21:03:33

+0

找到它,但即時通訊在這一行得到一個錯誤:MyControl.TabClicked + = new EventHandler(btnNewUser_Click); – Andres 2012-04-17 21:34:50

4

不要這樣做。
UserControl應該是一個獨立的塊,不需要知道其周圍環境。

相反,在您的UserControl中創建一個事件並在父頁面中處理它。您可以將點擊處理程序移至單獨的方法,並從按鈕點擊事件和新的自定義事件中調用該方法。