Добавить делегата события в обработчик событий пользовательского элемента управления ASP.NET.

У меня есть веб-управление пользователем в asp.net - клавиатура. Он имеет кнопки для всех цифр, текстовое поле для отображения ввода и кнопки очистки и отправки. Пользовательский элемент управления находится на панели обновления AJAX, поэтому его можно легко показать/скрыть. (Приложение предназначено для браузеров планшетов) Мне нужно добавить делегата в subMitButton ClickEventHandler внутри моего пользовательского элемента управления на панели обновления AJAX. Какие-либо предложения? Это вообще возможно? Я не хочу использовать мягкую цифровую клавиатуру планшета, потому что она слишком большая. Я мог бы разбить свой пользовательский элемент управления на части и использовать его код на своем веб-сайте, но я бы предпочел использовать пользовательский элемент управления по назначению.


person ArtK    schedule 25.02.2014    source источник


Ответы (2)


вы можете вызвать событие из пользовательского управления, которое может быть обработано на странице.

Вы можете объявить событие

public event EventHandler SubmitButtonClick;
 protected void OnSubmitButtonClick()
{
    if (SubmitButtonClick!= null)
    {
        SubmitButtonClick(this, new EventArgs());
    }
}

А затем на странице обработайте событие.

  WebUserControl1.SubmitButtonClick+= 
    new WebUserControl.EventHandler(WebUserControl1_SubmitButtonClick);
 private void WebUserControl1_SubmitButtonClick(object sender, EventArgs e)
{
    Label1.Text = "Button Pressed";
}
person Yousuf    schedule 25.02.2014
comment
это то, о чем я думал сразу после того, как опубликовал этот вопрос. Вместо того, чтобы пытаться получить доступ к событию внутри элемента управления веб-пользователя, создайте общедоступное событие для пользовательского веб-элемента управления, к которому будет легко получить доступ. Спасибо и за код. - person ArtK; 26.02.2014

Из-за жизненного цикла веб-страницы ASP.NET я получаю значения Null, когда устанавливаю общедоступные свойства пользовательского элемента управления с главной страницы. Эти переменные выходят из области видимости после отправки страницы клиенту. Тем не менее, вот простое решение, которое позволит вам получать уведомления, когда событие происходит в вашем пользовательском элементе управления.

ПРИМЕЧАНИЕ. Существуют некоторые проблемы с Page.Context при возвращении на главную страницу, поэтому изменение элементов, влияющих на состояние просмотра, может не работать.

Внутри моего пользовательского элемента управления я сделал следующее...

 // UC - setting up delegate and usercontrol property to store it
 public delegate void CallbackAction(object sender, CustomEventArgs e);
 public CallbackAction OnCallbackAction
 {
    get { return Session["CallbackAction"] as CallbackAction;  }
    set { Session["CallbackAction"] = value; }

 }

Где-то в UserControl происходит событие, о котором вы хотите уведомить главную страницу

// UC - callback from within the usercontrol
protected void UserControlButton_Click(object sender, EventArgs e)
{
   if (IsPostback)
   {
      // do some processing
      if (this.OnCallbackAction != null)
      {
         this.OnCallbackAction.Invoke(this, new CustomEventArgs("ET phone home") );
      }
   }

}

Приведенная выше структура теперь будет вызывать главную страницу, которая регистрируется в пользовательском элементе управления. Вот как зарегистрироваться в usercontrol с главной страницы

// Main Page - load event 
protected void Page_Load(object sender, EventArgs e)
{
   if (!IsPostback)
   {
      // register with usercontrol
      this.UserControlFoo.OnCallbackAction += CallbackFromUserControl_Click;
   }
}

// Main Page - this event will get called back when ET phones home
protected void CallbackFromUserControl_Click(object sender, CustomEventArgs e)
{
   // phoned home from usercontrol
}
person Juls    schedule 28.07.2015