Я создал пользовательский элемент управления, содержащий кнопку и несколько других элементов управления.
При объявлении моего пользовательского элемента управления в разметке 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
Я использую настраиваемую кнопку (на самом деле 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
}
Я нашел его!
Вместо использования барботажа событий я использую рефлекс в обработчике событий щелчка пользовательского элемента управления, поэтому у меня есть:
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">