2009-06-10 97 views
2

我創建了一個包含一個按鈕和一些其他控件的用戶控件。用戶控件的事件處理程序與按鈕onClick事件

在聲明中的HTML標記我的用戶控制我想做某種:

<asp:CustomControl onclick="CustomControl_Click" ID="cc1" runat="server"> 

哪裏CustomControl_Click顯然是我想要的點擊我的控制的按鈕時要調用的動作。

在我的控制到目前爲止,我有:

public event EventHandler Click; 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     Click.Invoke(sender, e); 
    } 

,但我怎麼能向前父頁面的事件處理程序將其分配到在我的控制的Click事件處理程序?

任何幫助是真的讚賞!

PS:也許有使用反射

回答

5

從託管頁面獲取方法我使用的是自定義按鈕(實際上是HTML DIV與的LinkBut​​ton嵌在裏面)的方式。這裏是它的代碼:

public delegate void ClickEventHandler(object sender, EventArgs e); 
    public event ClickEventHandler Click = delegate { }; 

    public string Text 
    { 
     get { return cmdLink.Text; } 
     set { cmdLink.Text = value; } 
    } 

    public bool CausesValidation 
    { 
     get { return cmdLink.CausesValidation; } 
     set { cmdLink.CausesValidation = value; } 
    } 

    public string OnClientClick 
    { 
     get { return cmdLink.OnClientClick; } 
     set { cmdLink.OnClientClick = value; } 
    } 

    public string CssClass 
    { 
     get { return cmdLink.CssClass; } 
     set { cmdLink.CssClass = value; } 
    } 

    protected void cmdLink_Click(object sender, EventArgs e) 
    { 
     Click(this, e); 
    } 

下面是使用在aspx頁面:

<Button_Control:ButtonControl ID="btnSave" runat="server" Text="Save" 
      OnClick="btnSaveClick" /> 

,這是在代碼隱藏aspx頁面的頁面:

protected void btnSaveClick(object sender, EventArgs e) 
    { 
     //do stuff here 
    } 
+2

但仍如何您是否將「OnClick =」btnSaveClick「映射到ClickEventHandler點擊?? – teebot 2009-06-11 14:29:58

+0

我想這是一個約定呢? 非常感謝您的回答! – teebot 2009-06-11 14:39:53

0

我找到了!

而不是使用事件冒泡我在用戶控件的Click事件處理程序使用反射,所以我有:

public string OnClick; 

    protected void Button1_Click(object sender, EventArgs e) 
    { 
     MethodInfo methodInfo = this.Page.GetType().GetMethod(OnClick); 
     methodInfo.Invoke(this.Page, new object[]{ sender, e }); 
    } 

而且它與聲明的用戶控制的工作原理:

<asp:CustomControl OnClick="CustomControl_Click" ID="cc1" runat="server">