簡體   English   中英

在C#ASP.NET中動態分配按鈕事件

[英]Dynamically assign button events in c# asp.net

您能告訴我以下代碼有什么問題嗎?

        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個分配了事件的新按鈕。 確實,它創建了按鈕,但是當我單擊它們時,什么也沒有發生。 我猜事件無法注冊。 我在這里做錯了什么?

之所以發生這種情況,是因為Page是無狀態類,一旦它呈現了所有內容,它就會被銷毀。 因此,一旦進行回發,該信息就會丟失,並且Page類也不知道按鈕的事件,因為動態按鈕不是aspx文件的一部分。

您需要維護可能在會話中創建的動態控件的集合,以便可以在回發后重新創建它們。 有一個例子在這里

如何在帶有事件的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]);
        }
    }
}

此代碼將打印在頁面加載事件中在運行時創建的每個按鈕ID。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM