У меня есть элемент управления, который обрабатывает комментарии. В этом элементе управления я установил обработчик события делегата для отправки электронного письма.
Тогда у меня есть различные типы управления, например, блог, статьи и т. д., каждый из которых может иметь или не иметь добавленный элемент управления комментариями (который выполняется динамически, когда я не знаю идентификаторов), т.е. элемент управления комментариями добавляется за пределы этого элемента управления. Каждый из этих элементов управления обрабатывает свою электронную почту по-разному (отсюда и событие).
Я пытаюсь определить, как назначить событие в родительском элементе управления. В настоящий момент мне приходится рекурсивно искать по всем элементам управления на странице, пока не найду элемент управления комментариями и не настрою его таким образом. Пример ниже объясняет:
КОММЕНТАРИЙ КОНТРОЛЯ
public delegate void Commenting_OnSendEmail();
public partial class Commenting : UserControl
{
public Commenting_OnSendEmail OnComment_SendEmail();
private void Page_Load(object sender, EventArgs e)
{
if(OnComment_SendEmail != null)
{
OnComment_SendEmail();
}
}
}
УПРАВЛЕНИЕ РОДИТЕЛЯМИ
public partial class Blog : UserControl
{
private void Page_Load(object sender, EventArgs e)
{
Commenting comControl = (Commenting)this.FindControl<Commenting>(this);
if(comControl != null)
{
comCtrol.OnComment_SendEmail += new Commenting_OnSendMail(Blog_Comment_OnSendEmail);
}
}
}
Есть ли более простой способ?
EDIT:
Причина, по которой я спрашиваю, заключается в том, что, если я выполняю поиск по этой странице. В качестве начального элемента управления меня беспокоит время, затрачиваемое на поиск в дереве элементов управления, чтобы найти его. Каждый другой тип страницы будет отличаться тем, насколько много у него будет контроля. В некоторых тестах он довольно быстро возвращает результат.