EventHandler является нулевым - PullRequest
       6

EventHandler является нулевым

9 голосов
/ 11 сентября 2009

Я пытаюсь вызвать событие клика из пользовательского элемента управления и обработать его на содержащей странице. У меня проблема в том, что когда я нажимаю кнопку «imgstep1» на пользовательском элементе управления, запускается код события imgstep1_click, но событие «btnHandler» всегда равно нулю. Следовательно, он не вызывает родительское событие.

Любая помощь по этому вопросу будет высоко ценится.

Мой контрольный код пользователя:

.ascx код:

<asp:ImageButton ImageUrl="./images/step1.gif" 
        ID="imgstep1" runat="server" 
         OnClick="imgstep1_Click"/>

.ascx.cs код:

    public delegate void OnImageButtonClick();
    public event OnImageButtonClick btnHandler;

    protected void imgstep1_Click(object sender, ImageClickEventArgs e)
    {
        if (btnHandler != null)
            btnHandler();
    }

.aspx код страницы:

protected void Page_Load(object sender, EventArgs e)
{
     ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler);
}

void ucStepHdr_btnHandler()
{
  Response.Write ('test');
}

Ответы [ 3 ]

11 голосов
/ 11 сентября 2009

Код выглядит достаточно простым для правильной работы. Единственная причина, по которой btnHandler равен null, может заключаться в том, что код регистрации события на странице aspx не вызывается.

Есть ли сообщение назад? Вы уверены, что добавляете событие КАЖДОЕ ВРЕМЯ, когда страница загружается ???

ucStepHdr.btnHandler += new StepsHeader.OnImageButtonClick(ucStepHdr_btnHandler);
1 голос
/ 11 сентября 2009

Если вы удалите OnClick="imgstep1_Click" и поместите это в свой ascx.cs

protected ImageButton imgstep1;

protected override void OnInit(EventArgs e)
{
    this.imgstep1.Click += new ImageClickEventHandler(imgstep1_Click);
}

Этот метод подключения вашего мероприятия работает?

0 голосов
/ 11 сентября 2009

Похоже, это должно работать ... Вы можете пройтись по коду в отладчике и посмотреть, каково значение ucStepHdr.btnHandler, как только вы установите его в Page_Load? (Кроме того, традиционно они устанавливаются в init, а не в load, но это не ваша проблема.)

...