前几天一直在研究这个问题,看了很多资料,比如说这个:http://blog.csdn.net/wonsoft/article/details/4351406
方法确实可行,但是还是有一些问题感到疑惑,作者文章里有这句话:添加控件和给控件加事件时绝对不能放到 if(!IsPostback){}里面,那样的话,点击一次后控件会消失,而且事件也不会执行。 我试验了一下果然如此。究其原因,个人认为是因为触发事件后回发至客户端引起页面重新加载,于是(!ispostback)中的控件生成没有执行到,所以控件集体“消失”了。
但是问题来了,(这次控件生成的代码没有放在ispostback中),我跟踪了一下代码的执行,发现,首次加载的时候把生成控件的方法执行了一遍,但是,触发控件事件回传的时候,又再次把代码执行了一遍!!!想象一下,如果是静态的控件,我们可以直接写事件的触发方法,事件触发,直接跳到方法里执行。可是这里居然连带着把生成控件的代码执行的一遍!!!难道是因为 重新生成一下控件,以方便捕捉到相应的控件的事件触发方法???这在原理上是可以解释的,毕竟控件都是一样的。于是,我模拟了一下:
问题描述:我在一个网站里做了一个首页加载的时候,可以随机从数据库中选取100张图片的给游客观看的功能,原理是先把数据库里所有图片的id(大于100个)值存进一个一维数组里,再设定随机数生成的范围就是这个数组中的id值,于是就可以生成一百张图片(过滤重复图片的方法不提),问题来了,存放这100张图片的控件我也是动态生成的,我还特意为每个照片加了一个linkbutton按钮来测试回传,结果确实也是把生成代码再次执行了一番,但是问题是生成的图片ID是随机的,两次的随机数是不可能一样的,也就是说第二次执行控件生成的时候图片的Id应该已经改变!但为什么还能找到对应的事件触发方法?!求大神解释!
最讨厌动态生成控件了
咱可以解决完这个问题再一起狠狠地讨厌吗?
控件 和 控件事件 看看 怎么对应的就行了。没看出问题。
其实是有的,因为随机的效果消失了,我发在了csdn上,有关于这个问题的进一步描述,http://bbs.csdn.net/topics/390321281?page=1#post-393246450
问题找到了,但是没有解决的方案
@儒生:
不好意思,仍然不知道 楼主的问题在哪? 随机id 跟事件 有啥关系? 请赐教, 贴代码 看看
需要重新注册事件