我有一个动态的ImageButton,我希望它在点击时触发一个方法。我有以下代码,不幸的是它没有用。
ImageButton imb = new ImageButton();
imb.Attributes.Add("runat", "server");
imb.Click += new ImageClickEventHandler(ImageButton1_Click);
imb.ID = "ID";
imb.ImageUrl = "link to image";
Panel1.Controls.Add(imb);
protected void ImageButton1_Click(object sender, ImageClickEventArgs e)
{
//it should go here
}
答案 0 :(得分:0)
您必须将ImageButton添加到合适的continer中。
例如:
form1.Controls.Add(Imb);
/// form1 must have runat=server
您可以在here找到有用的提示。
答案 1 :(得分:0)
向页面添加动态控件是一件棘手的事情。不幸的是,您不能只声明WebControl
派生类型的对象并期望它能够工作。
在ASP.NET WebForms中,有一个名为Page Lifecycle的概念。这是一个广泛的问题,但我的观点是,您必须遵守将动态控件插入页面的特定顺序。下面是一个实际的例子。
从班级的动态控制声明开始。
protected ImageButton imb = null;
然后在页面初始化期间初始化它。一种可能性是处理PreInit事件。
protected void Page_PreInit(object sender, EventArgs e)
{
imb = new ImageButton()
{
ID = "ID",
ImageUrl = "link to image"
};
imb.Click += Imb_Click;
Panel1.Controls.Add(imb);
}
private void Imb_Click(object sender, ImageClickEventArgs e)
{
// Do your stuff
}
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
// Set initial properties as appropriate. E.g.
imb.AlternateText = "...";
}
}
你很高兴。