我正在尝试动态声明一个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
答案 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,但使用不同的站点并为用户动态创建按钮时,此功能非常有用。