事件控制不起作用?

时间:2009-08-20 11:01:18

标签: asp.net controls

我创建按钮控件并放置在面板中但不起作用?

protected void Button1_Click(object sender, EventArgs e)
    {
        Button btn = new Button();
        btn.Text = "Test button";
        Panel1.Controls.Add(btn);
        btn.Click += new EventHandler(btn_Click);
    }

    void btn_Click(object sender, EventArgs e)
    {
        Response.Write("<script>alert('test')</script>");
    }

2 个答案:

答案 0 :(得分:1)

当您向页面动态添加控件时,必须在任何后续请求(回发)上重新添加它们。您在Button1_OnClick中添加的按钮不会在后续请求中自动重新创建(例如在回发中)。

关于这个主题有很多类似的问题,你可以在那里找到细节。例如,使用以下搜索:

答案 1 :(得分:0)

确保为按钮指定一个ID,并确保每次创建它时都相同。

在CreateChildControls重载中创建控件,将其添加一次以响应另一个事件不足以将其保留在页面上。

您最好的选择是跟踪是否需要创建按钮:

bool CreateButton
{
    get
    {
        if (ViewState["CreateButton"] == null)
            return false;

        return (bool)ViewState["CreateButton"];
    }
    set
    {
        ViewState["CreateButton"] = value;
    }
}

override void public CreateChildControls ()
{
    panel1.Controls.Clear ();

    if (CreateButton)
    {
       Button btn = new Button();
       btn.Text = "Test button";
       btn.ID = "CreatedButton"; // Note the ID here...
       Panel1.Controls.Add(btn);
       btn.Click += new EventHandler(btn_Click);
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    CreateButton = true;
    EnsureChildControls ();
}

void btn_Click(object sender, EventArgs e)
{
    Response.Write("<script>alert('test')</script>");
}

这样的事情对你有用......