Событие щелчка System.Web.UI.WebControls.Button не срабатывает

В моем коде С# у меня есть функция для динамического создания кнопок

private Button createPageButton(string id, string text, int navTo = 0)
{
    Button btn = new Button();
    btn.ID = id;
    btn.Text = text;
    btn.Click += new EventHandler(btnNavigate_To_Page);
    return btn;
}

Который настраивается следующим образом:

С#:

public void someMethod()
{
    Button btnPage_First = createPageButton("btnFirst_Page", "First", 1);
    panelNavPageButtons.Controls.Add(btnPage_First);
}

aspx:

 <asp:Panel ID="panelPageNavButtons" CssClass="pageNavBtns" runat="server"></asp:Panel>

Проблема. Событие btnNavigate_To_Page не срабатывает. Метод createPageButton не вызывается внутри Page_Load, но если я включу в панель кнопку asp (см. ниже), то любая дополнительная кнопка, которую я добавлю на стороне сервера, будет работать правильно.

<asp:Panel ID="panelPageNavButtons" CssClass="pageNavBtns" runat="server">
    <asp:Button ID="btnPage_Prev" runat="server" OnClick="btnNavigate_To_Page" />
 </asp:Panel>

Я хотел бы настроить все кнопки динамически, не включая никаких ссылок на btnNavigate_To_Page в файле .aspx.


person Will Knight    schedule 26.02.2018    source источник
comment
Если вы создаете динамические кнопки, вам придется создавать их заново каждый раз, когда происходит PostBack. Поэтому вам нужно отслеживать все кнопки, которые вы создаете с помощью createPageButton.   -  person VDWWD    schedule 27.02.2018


Ответы (1)


Вы должны вызвать метод someMethod внутри события Init или Load.

Причина в том, что динамически создаваемые элементы управления не находятся в дереве элементов управления, поэтому вам необходимо перезагружать их при каждом сообщении обратно с одним и тем же идентификатором.

protected void Page_Init(object sender, EventArgs e)
{
    someMethod();
}
person Win    schedule 26.02.2018
comment
Я только что понял, что уже делаю это, кнопки появляются и остаются там... какой-то метод просто вызывается в контексте другого метода, который вызывается в PageInit при каждом обратном сообщении... Проблема в том, что я все еще могу' t заставить это событие сработать - person Will Knight; 27.02.2018