0

我正在动态创建一个按钮并将其放置在一个占位符中,如下所示

<asp:Button ID="generateTableSchema" runat="server" Text="Generate Table" OnClick="generate_Click" />

 protected void generate_Click(object sender, EventArgs e)
    {
Button button = new Button();
button.Text = "Generate Table";
button.ID = "generateTable";
button.OnClick = hello();
PlaceHolder1.Controls.Add(button);
}

但 onclick 事件没有触发。

这是我得到的错误

System.Web.UI.WebControls.Button.OnClick(System.EventArgs)' is inaccessible due to its protection level

你好如下...

public void hello()
    {
        Label1.Text = "heellllllllllo";
    }

这里有什么问题????

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
        }
        else
        {
            button.Click += ButtonClick;
        }
    }

@Daren你的意思是这样...

4

6 回答 6

1

是一种受保护的OnClick方法。你应该使用事件Click

button.Click += new EventHandler(Click);

public void hello(object sender, EventArgs e)
{
    Label1.Text = "heellllllllllo";
}

顺便说一句,请确保您在每次回发中创建并添加控件,否则该事件将不起作用。

于 2012-11-19T14:47:03.770 回答
1

因为您正在以编程方式添加按钮,所以您必须添加事件处理程序。

所以这会工作..

编辑 在 Page_Load 内包装了按钮

protected void Page_Load(object sender, EventArgs e)
{
 Button button = new Button();
 button.Text = "Generate Table";
 button.ID = "generateTable";
 button.Click += hello;    /// THIS is the handler
 PlaceHolder1.Controls.Add(button);
}

ButtonClick 将是您的方法的名称。

    protected void hello(Object sender, EventArgs e)
    {
     // ...
    }

此外,当您在运行时生成它时,您需要确保它在回发时也被调用。

于 2012-11-19T14:47:30.887 回答
1

更改button.OnClick = hello();为:

button.Click += new EventHandler(hello);

并将定义更改为hello()

protected void hello(object sender, EventArgs e)
{
    Label1.Text = "heeellllllo";
}
于 2012-11-19T14:47:51.490 回答
1

该事件称为Click您需要添加具有正确签名的事件处理程序:

button.Click += new EventHandler(hello);

签名是:

protected void hello(Object sender, EventArgs e)
{
    // ...
}

如何:使用代码添加事件处理程序

请注意,您需要在每次回发时重新创建动态控件。

于 2012-11-19T14:48:06.847 回答
0
 protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
        }
        else if(Page.IsPostBack && Label11.Text=="yes")
        {
            Button button = new Button();
            button.Text = "Generate Table";
            button.ID = "generateTable";
            button.Click += ButtonClick;
            PlaceHolder1.Controls.Add(button);
        }
    }

环境

        Label11.Text = "yes";

在 generate_click 中。

protected void ButtonClick(object sender, EventArgs e)
    {
        Label1.Text = "heeellllllo";
    }
于 2012-11-19T15:37:38.947 回答
0

您分配执行的结果hello()

尝试分配:

button.OnClick = hello;

- 编辑 -

显然,这并不能澄清你的错误。

改为将处理程序添加到事件处理程序:

button.Click += hello;
于 2012-11-19T14:46:47.783 回答