Пользовательское событие не работает при регистрации в ASPX-файле

#asp.net #events #user-controls #asp.net-3.5

#asp.net #Мероприятия #пользовательские элементы управления #asp.net-3.5

Вопрос:

Я пытаюсь зарегистрировать пользовательское событие, которое я добавил в пользовательский элемент управления. Я могу сделать это в коде, но не в aspx-файле.

Что я делаю не так?

Спасибо!

Пользовательский элемент управления:

 public delegate void MemberSelectedEventHandler(object sender, string fullMemberName);

public partial class WebUserControl1 : System.Web.UI.UserControl
{
    public event MemberSelectedEventHandler OnMemberSelected;

    protected void Button_OnClick(object sender, EventArgs e)
    {
        if (OnMemberSelected != null)
        {
            OnMemberSelected(this, "Peter");
        }
    }
}
 

Это работает (код за aspx-страницей):

 MyMemberControl.OnMemberSelected  = new MemberSelectedEventHandler(MyMemberControl_OnMemberSelected);
 

Но это не так (страница aspx):

 <scn:MemberControl OnMemberSelected="MemberControl_OnMemberSelected"  runat="server" ID="MyMemberControl" />
 

Ответ №1:

Прежде всего, я должен сделать небольшое замечание: когда вы создаете пользовательское событие, вам не нужно называть его с префиксом ‘On’. .Net framework добавляет этот префикс, и разметка intellisense покажет вам OnOnMemberSelected.

Я не знаю, нужно ли это, но попробуйте поместить объявление делегата в ваш класс WebUserControl1. Я всегда так делаю.

Разметка intellisense реагирует очень медленно, и я не вижу, является ли она детерминированной при повторном заполнении информации intellisense.

Итог: — поместите определение делегата в свой класс. — сборка — вставьте свой код разметки.

Если intellisense не работает немедленно, я думаю, что это сработает.

Комментарии:

1. Пожалуйста, не добавляйте свое имя в каждое сообщение — ваше имя уже указано здесь ^^^

Ответ №2:

В разметке вам нужно добавить к своему свойству события префикс On, чтобы страница знала, что нужно зарегистрировать событие. У Морзеля был ответ, хотя он не указан явно.

 <scn:MemberControl OnOnMemberSelected="MemberControl_OnMemberSelected"  runat="server" ID="MyMemberControl" />
 

OnOnMemberSelected должно привести к тому, что ваш обработчик будет вызван, как и ожидалось.