2009-09-18 129 views

回答

1

FYI我是一個C#的傢伙,你需要我的解決方案轉換爲vb.net,或者如果有人希望編輯這個答案,這將是膨脹。我可以嘗試和記住語法,但是我會弄錯它,增加更多的困惑,然後它的價值。

這工作,全部做的是鑄造頁面向右類型:

((MyParentPageType)this.Page).Method() 

這一說我不建議這樣做。你基本上把這個用戶控件硬連線到父頁面。您至少可以定義一個接口,任何包含此控件的頁面都必須實現。此時你已經提供了一些解耦。

一個更好的機制是用戶控件引發一個事件,即父頁面將是訂閱者。這是所有其他控件的工作原理。爲此,您可以像

在你的用戶控件添加事件:

private static readonly object EventClick=new object(); 
public event EventHandler<ClickEventArgs> Click 
{ 
    add 
    { 
     base.Events.AddHandler(EventClick, value); 
    } 
    remove 
    { 
     base.Events.RemoveHandler(EventClick, value); 
    } 
} 

那麼你的頁面將添加一個處理Click事件,那麼當你需要,你可以觸發事件。現在,您已將頁面上的用戶控件分離出來。

0

不知道VB.Net那麼好,但在C#中的代碼後面我想補充:

/// <summary> 
    /// Relay 
    /// </summary> 
    public event EventHandler ButtonClick; 

    protected void BtnClick(object sender, EventArgs e) 
    { 
     if (this.ButtonClick != null) this.ButtonClick(sender, e); 
    } 

我認爲VB.Net將是(但真的不知道!):

Public Event ButtonClick as EventHandler 

    Private Sub BtnClick(ByRef sender as object, ByRef e as EventArgs) 
     RaiseEvent ButtonClick(sender, e) 
    End Sub 

這暴露了UserControl上的一個事件,可以在頁面中使用該事件來連接它。

在UserControl的Asp:Button的標記上,設置OnClick="BtnClick",它應該將事件中繼到UserControl上的事件。

在頁面的標記中添加OnButtonClick="PageBtnClick"到UserControl標記,然後可以調用您希望的頁面的方法。

相關問題