动态创建ImageButton

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

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

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

但是当我尝试为按钮分配OnClick处理程序时,它会抛出以下exception:

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

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

正如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); } 

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

 btn.Click += ClickHandlingMethod; 

一个例子:

 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 // ... }