添加控件在Page_Init
,而不是在你的Page_Load
。 [1]
此外,你没有按照它应该这样做。考虑以下代码
//your collection of objects goes here. It might be something different than
//this, but basically a Dictionary<int, YourType> goes fine
public Dictionary<Int32, string> Ids
{
get { return (ViewState["ids"] ?? new Dictionary<Int32, string>()) as Dictionary<Int32, string>; }
set { ViewState["ids"] = new Dictionary<Int32, string>(); }
}
protected void Page_Init(object sender, EventArgs e)
{
//load the data using your DAO
Ids = new Dictionary<int, string>();
Ids.Add(1, "http://www.huddletogether.com/projects/lightbox2/images/image-2.jpg");
Ids.Add(2, "http://helios.gsfc.nasa.gov/image_euv_press.jpg");
foreach (var item in Ids)
{
ImageButton imb = new ImageButton()
{
ImageUrl = item.Value,
CommandArgument = item.Key.ToString(),
CommandName = "open"
};
imb.Click += new ImageClickEventHandler(imb_Click);
PH1.Controls.Add(imb);
}
}
void imb_Click(object sender, ImageClickEventArgs e)
{
Response.Write("You purchased " + Ids[int.Parse(((ImageButton)sender).CommandArgument)]);
}
[1](CTRL + C/Ctrl + V从一些其他的问题,我回答了上周):即必须保持之间的页面周期应该声明
一切在Page_Init
,而不是Page_Load
。
所有初始化,如添加事件处理程序和添加控件都应该在初始化时添加,因为状态在页面循环之间保存。处理控件的内容和视图状态应在Load
中完成。
还请检查http://msdn.microsoft.com/en-us/library/ms178472.aspx。
初始化
毕竟控件都已初始化且已应用所有外观 设置引发。使用此 事件来读取或初始化控件 属性。
。
负载
页调用页面上OnLoad事件方法 ,然后递归确实的 相同为每个子控制,其 做同样对于其每个子的 控制,直到页面和所有 控件被加载。
使用OnLoad事件方法在控件中设置 属性并建立 数据库连接。
当我从Page_Load更改为Page_Init时,发生同样的事情。 这行有什么不对吗 ib.Click + =购买(g); 因为它点击图像按钮之前触发点击事件! – Kubi 2010-01-18 17:25:36
检查我的编辑.. – 2010-01-18 17:26:22