C# / apsx.net - динамически созданная кнопка не работает

Вот моя проблема: я динамически создал несколько кнопок на своей странице (в методе Page_PreInit), все они связаны с одним и тем же обработчиком событий. Но эти кнопки не запускают событие, когда я нажимаю на них... Кто-нибудь может мне помочь?

Вот часть моего кода:

Создание кнопки (в цикле foreach в методе Page_PreInit):

Button b = new Button();
field.Controls.Add(b);

b.Text = "Download";
b.ID = tmp_out[type] as String;
b.Click += new EventHandler(Download_Click);

Метод OnClick:

private void Download_Click(object sender, EventArgs e)
{
    //doing some stuff
}

4 ответа

Решение

Хорошо, я решил свою проблему.

Идентификаторы кнопок содержали некоторые символы "\". Я только что удалил эти '\', и все работает отлично.

Спасибо всем за ваш ответ!

Динамические элементы управления должны быть добавлены во время Page PreInit или Init, а не при загрузке. Это из-за жизненного цикла страницы и загрузки viewstate... так что попробуйте сначала, чтобы увидеть, решит ли это проблему.

Кроме того, я считаю, что я прочитал, что лучше заказать ваш код таким образом:

Button b = new Button();
field.Controls.Add(b);

b.Text = "Download";
b.ID = tmp_out[type] as String;
b.Click += new EventHandler(Download_Click);

Сначала добавьте элемент управления во внутреннюю коллекцию, затем измените его свойства.

Не должно быть так?

...
b.Click += new EventHandler(Download_Command);
...

private void Download_Command(object sender, EventArgs e)
{
    //doing some stuff
}

Ваш оператор обработчика событий

b.Click += new EventHandler(Download_Click);

но твой метод

private void Download_Command(object sender, CommandEventArgs e)

Вы уверены, что это правильный метод для запуска?

Другие вопросы по тегам