#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
должно привести к тому, что ваш обработчик будет вызван, как и ожидалось.