110,538
社区成员
发帖
与我相关
我的任务
分享
private void add_line(int userID,string userName,string sex,string address,string birthday)
{
Panel p1 = new Panel();
Button b1 = new Button();
b1.Text = "添加";
b1.ID = "b" + itemsCount;
b1.Click += new System.EventHandler(this.b1_Click);
p1.Controls.Add(tb);
p1.Controls.Add(b1);
p1.Height = 30;
this.Panel2.Controls.Add(p1);
itemsCount++;
}
public void b1_Click(object sender, EventArgs e)
{
Button b1 = sender as Button;
int control_id = int.Parse(b1.ID.Substring(1));
mani_friends.add_new_friends("1",control_id.ToString());
}
protected void Page_Load(object sender, EventArgs e)
{
Panel p1 = new Panel();
Button b1 = new Button();
b1.ID = "b" + itemsCount;
b1.Click += new System.EventHandler(this.b1_Click);
p1.Controls.Add(tb);
p1.Controls.Add(b1);
this.Panel2.Controls.Add(p1);
}
这样重建控件树并且重新定义事件监听,那么asp.net就会从ViewState中把相应控件的Text和Height属性给它重新填进来,并且随后把post的数据也填进来,并且在页面load过程结束之后触发b1.Click。
但是上述代码不一定是对的。因为看你贴出的代码,貌似你打算动态地添加多个p1,而不是一个。我现在懒得再讨论asp.net了,希望你搞懂asp.net的页面生命机制再编写动态添加控件的程序。如果你没有懂得asp.net的控件开发机制,那么就老老实实地使用DataList或者Repeater控件吧(那个bt以及b1都是是在设计页面上用鼠标拖拉设计模板内容就行了),不要自己写代码。
http://bbs.csdn.net/topics/380169102
我反复说过一个最简单的测试。我们可以用这个最简单的东西看看每一个人是否理解asp.net编程。你可以简单地往页面上拖一个button控件,然后其后台click事件中什么都不做。这就ok了!然后你在调试自己的程序时可以随时随意地点击这个按钮。显然,这个按钮什么具体的自定义代码都不做,那么当它被点击并且服务器上处理完这个click之后:
1. 你再在前端页面上显然应该看到任何界面都没有改变,什么也没有丢失、也没有混乱。
2. 同时假设你的动态内容有读取数据库的动作的话,你应该监测到没有任何读取数据重新来绑定控件之类的动作,因为这个按钮根本不做什么事情。如果要重新查询数据库并且引起一大堆控件重新绑定,可见程序性能低到极点。
你的程序能够通过这个简单的测试吗?如果不能,那么从头理解asp.net编程,还不晚。许多人写的asp.net程序在这个最初级的测试下都是一塌糊涂经不起检验的,这样的程序甚至可能被用到博客上、教程上,变成了坑害学生的范例了。