Динамически назначать события кнопки в c # asp.net - PullRequest
2 голосов
/ 09 мая 2011

Подскажите, пожалуйста, что не так со следующим кодом?

        Panel div = new Panel();
        Button btn1 = new Button { Text = "Delete", CommandArgument = "argument", ID = "remove" };
        Button btn2 = new Button { Text = "Insert", CommandArgument = "argument2", ID = "insert" };

        btn1.Click += new EventHandler(btn_click);
        btn2.Click += new EventHandler(btn_click);

        div.Controls.Add(btn1);
        div.Controls.Add(btn2);

        ph_plan.Controls.Add(div); // where ph_plan is a placeholder in the user control

protected void btn_click(object sender, EventArgs e)
{
    Button btn = (Button)sender;
    if(btn.ID == "remove")
        // do this
    else 
        // do that
}

Код выше появляется сразу после нажатия на кнопку в пользовательской форме. Предполагается создать 2 новые кнопки с назначенными событиями. Действительно, он создает кнопки, но когда я нажимаю их, ничего не происходит. Я думаю, что события не могут быть зарегистрированы. Что я тут не так делаю?

Ответы [ 2 ]

6 голосов
/ 09 мая 2011

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

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

0 голосов
/ 30 декабря 2012

Как создать множественный элемент управления в asp.net с событием:

string[] arg = new string[10];

protected void Page_Load(object sender, EventArgs e)
{

    for (int i = 0; i < 10; i++)
    {
        LinkButton bb = new LinkButton();
        arg[i]= bb.ID = "bb" + i.ToString();
        bb.Text = "like"+"<br/>";
        Panel1.Controls.Add(bb);
        bb.Click += new EventHandler(bb_Click);
    }
}

void bb_Click(object sender, EventArgs e)
{
    LinkButton btn = (LinkButton)sender;
    for (int j = 0; j < 10; j++)
    {
        if (btn.ID == arg[j])
        {
            btn.Text = "";
            btn.Text = "unlike";
            Response.Write(arg[j]);
        }
    }
}

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

...