动态创建ImageButton

时间:2012-06-16 08:20:29

标签: c# asp.net

我正在尝试动态声明一个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 个答案:

答案 0 :(得分:5)

即使 可以访问,也无法为这样的方法赋值。您需要订阅该活动:

btn.Click += ClickHandlingMethod;

答案 1 :(得分: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
    // ...
}

答案 2 :(得分:4)

看看这个answer,它与动态控件和事件相关

如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
    }

Alternativeley

    protected void Page_Init(object sender, EventArgs e)
    {
        var i = new ImageButton();
        i.Click += (source, args) =>
        {
            // do something
        };
        this.myPanel.Controls.Add(i);
    }

答案 3 :(得分: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,但使用不同的站点并为用户动态创建按钮时,此功能非常有用。