Не удается вызвать событие нажатия на динамическую кнопку - PullRequest
2 голосов
/ 02 января 2012

Я хочу создать метод в коде, который создает кнопку и помещает ее в PlaceHolder. Я хочу, чтобы эта кнопка имела событие Click.

После вызова метода «test» кнопка помещается правильно, но событие click не вызывается.

private void test()
    {
        Button linkBtn1 = new Button();
        linkBtn1.Text = "linkBtn1";
        linkBtn1.OnClientClick = "return false;";
        linkBtn1.Click += new EventHandler(linkBtn1_Click);
        PagesPlaceHolder.Controls.Add(linkBtn1);          

    }

    void linkBtn1_Click(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }

Ответы [ 2 ]

3 голосов
/ 02 января 2012

Удаление OnClientClick = "return false;" необходимо, но не достаточно, чтобы заставить это работать.Если вы хотите, чтобы обработчик событий на динамически добавленной кнопке срабатывал, вам нужно будет добавлять эту кнопку каждый раз, когда страница загружается .

Одним простым способом было бы сохранить тот факт, что кнопка была добавлена ​​в ViewState, а затем проверить это на PageLoad и повторно добавить кнопку, если необходимо.

Вот пример, которыйработает для меня (и выдает исключение при нажатии)

protected void Page_Load(object sender, EventArgs e)
{
    //if the button was added previously, add it again
    if (ViewState["Added"] != null && (bool)ViewState["Added"])
        addButton();
}

//this is the method that adds the button
protected void add_Click(object sender, EventArgs e) {
    ViewState["Added"] = true;
    addButton();
}

private void addButton() {
    Button linkBtn1 = new Button();
    linkBtn1.Text = "linkBtn1";
    linkBtn1.Click += new EventHandler(linkBtn1_Click);
    placeholder1.Controls.Add(linkBtn1);
}

void linkBtn1_Click(object sender, EventArgs e) {
    throw new Exception("Button Click Event Triggered.  Hello yellow screen!!!");
}
0 голосов
/ 02 января 2012

Как указывает @oleksii, клиентский код возвращает значение false, поэтому форма никогда не отправляется. Вы должны закомментировать это, тогда ваш обработчик событий должен сработать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...