Eventhandler для UserControl с кнопкой события onClick - PullRequest
2 голосов
/ 10 июня 2009

Я создал пользовательский элемент управления, который содержит кнопку и несколько других элементов управления.

При объявлении моего пользовательского элемента управления в разметке 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);
    }

но как я могу переслать обработчик событий родительской страницы, чтобы назначить его обработчику кликов в моем элементе управления?

Любая помощь действительно приветствуется!

PS: может быть, есть способ получить метод со страницы хостинга с помощью рефлексии

Ответы [ 2 ]

5 голосов
/ 10 июня 2009

Я использую пользовательскую кнопку (на самом деле html div с LinkButton , встроенным в нее) Вот код этого:

    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
    }
0 голосов
/ 10 июня 2009

Я нашел это!

Вместо использования всплывающих событий я использую рефлексию в обработчике событий 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">
...