3

我正在尝试动态声明一个 ImageButton。

我声明它并为其分配一个 ID 和图像,如下所示:

ImageButton btn = new ImageButton();
btn.ImageUrl = "img/Delete.png";
btn.ID = oa1[i] + "_" + i;
btn.OnClick = "someMethod";

但是,当我尝试为按钮分配 OnClick 处理程序时,它会引发以下异常:

System.Web.UI.WebControls.ImageButton.OnClick is inaccessible due to protection level
4

4 回答 4

5

你不能给这样的方法赋值,即使它可访问的。您需要订阅该事件:

btn.Click += ClickHandlingMethod;
于 2012-06-16T08:22:13.250 回答
4

一个例子:

private void CreateAButton()
{
    var button = new ImageButton();
    button.ImageUrl = "yourimage.png";
    button.ID = "Button1";
    button.Click += ButtonClick;

    Page.Form.Controls.Add(button);
}

private void ButtonClick(object sender, ImageClickEventArgs e)
{
    // Do stuff here
    // ...
}
于 2012-06-16T08:30:44.660 回答
4

看看这个答案,它与动态控件和事件有关

正如 Jon 评论的那样,您不能向事件添加字符串,在这种情况下,您需要为事件添加处理程序:

    protected void Page_Init(object sender, EventArgs e)
    {
        var i = new ImageButton();
        i.Click += new ImageClickEventHandler(i_Click);
        this.myPanel.Controls.Add(i);
    }

    void i_Click(object sender, ImageClickEventArgs e)
    {
        // do something
    }

替代利

    protected void Page_Init(object sender, EventArgs e)
    {
        var i = new ImageButton();
        i.Click += (source, args) =>
        {
            // do something
        };
        this.myPanel.Controls.Add(i);
    }
于 2012-06-16T08:32:40.523 回答
0

您可以使用此代码(一项重大更改):

private void CreateAButton()
    {
        var button = new ImageButton();
        button.ImageUrl = "yourimage.png";
        button.ID = "Button1";           
        button.PostBackUrl = "http://www.towi.lt";
        Page.Form.Controls.Add(button);
    }

技巧在“PostBackUrl”中。如果您编写正确的链接,它将重定向到它(如示例所示)。在其他情况下,这将添加原始服务器名称、“/”和您输入的文本。例如 'xxx' 将变成“ http://yourservername/xxx ”。当您使用重定向到同一个 ISS 但不同的站点并为用户动态创建按钮时,它非常有用。

于 2019-03-28T09:15:11.413 回答