Eventhandler для UserControl с кнопкой события onClick

2

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

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

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

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

PS: может быть, есть способ получить метод с страницы размещения с помощью reflexion

Теги:
user-controls
event-handling

2 ответа

5
Лучший ответ

Я использую настраиваемую кнопку (на самом деле 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
    }
  • 2
    Но все же, как вы сопоставляете "OnClick =" btnSaveClick "с ClickEventHandler Click ??
  • 0
    Я полагаю, это конвенция? Большое спасибо за ваш ответ!
Показать ещё 1 комментарий
0

Я нашел его!

Вместо использования барботажа событий я использую рефлекс в обработчике событий щелчка пользовательского элемента управления, поэтому у меня есть:

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">
  • 0
    Это отражение, а не отражение, и делегаты и обработчики событий просто делают это для вас автоматически!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню