BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / dot-net / #2586同步于 2010/12/22
该镜像源已超过 30 天没有更新,可能在源站已被删除。
dotNET机器人发帖

【求助】asp.net 动态控件问题

xhppl2515
2010/12/22镜像同步2 回复
写了一个这样的页面,通过选择Dropdownlist里的内容来动态添加相应的TextBox控件,想点击一个按钮来保存这些textbox中的内容。 之前是在Dropdownlist的selectedindexchanged事件中动态添加TextBox,但是这样的话,点击保存以后由于Postback,先执行page_load再执行button_Click,那么这些动态添加的控件就在Page_Load以后消失了button_Click里面找不到这些控件。 在网上查了半天,看到一个Demo,是把动态添加TextBox放在page_load里面执行,这样一来在点击按钮触发Click事件的时候,page_load先执行,执行完以后,TextBox就可以在button_Click里面被找到了。问题就是,我理解的,在button_Click事件触发的时候,page_load执行之前,由Dropdownlist的selectedindexchanged事件生成的TextBox被清除,然后page_load再生成一次TextBox,Button_Click内使用FindControl找到的TextBox是在之前page_load新生成的,那么我填写的那些希望保存起来的记录会在新生成的TextBox里面么?好像是跟ViewState有关,但是还是不明白这之间的机制。 表达的不知道清楚不清楚,有哪位能帮忙解释一下这其中的奥秘?
订阅后,新回复会通过你的通知中心匿名送达。
2 条回复
wangjianzhou机器人#1 · 2010/12/27
建议同学还是好好的看看ASP.NET的页面生命周期,你的问题有点模糊,我不是很明白,我简单给给你说 一下,ASP.NET的生命周期和我能看懂你问题的答案。 对于你这个页面,点击提交后,页面的生命周期如下: 1.Page.Init; 2.Page.Load 3.Dropdownlist.selectedindexchanged,TextBox.Change 4.Button.Click; 5.Page.PreRender 6.Page.Unload Page.Init加载控件属性,当你的页面不是第一次回传(!IsPostBack)时,就会反序列化ViewState的保的控件信息。 Page.Load里加载页面和所有控件,动态控件都是这个阶段加载完成。所以你Dropdownlist.selectedindexchanged时期望的控件在这个阶段会被清除。 由于TextBox.Change发生在Button.Click之前,所以你提交时,TextBox里的值不会被清除,会被提交至服务器。 至于动态添加控件Controls.Add()和寻找控件FindControls,这个相比你也知道,我就不啰嗦了。 【 在 xhppl2515 的大作中提到: 】 : 写了一个这样的页面,通过选择Dropdownlist里的内容来动态添加相应的TextBox控件,想点击一个按钮来保存这些textbox中的内容。 : 之前是在Dropdownlist的selectedindexchanged事件中动态添加TextBox,但是这样的话,点击保存以后由于Postback,先执行page_load再执行button_Click,那么这些动态添加的控件就在Page_Load以后消失了button_Click里面找不到这些控件。 : 在网上查了半天,看到一个Demo,是把动态添加TextBox放在page_load里面执行,这样一来在点击按钮触发Click事件的时候,page_load先执行,执行完以后,TextBox就可以在button_Click里面被找到了。问题就是,我理解的,在button_Click事件触发的时候,page_load执行之前,由Dropdownlist的selectedindexchanged事件生成的TextBox被清除,然后page_load再生成一次TextBox,Button_Click内使用FindControl找到的TextBox是在之前page_load新生成的,那么我填写的那些希望保存起来的记录会在新生成的TextBox里面么?好像是跟ViewState有关,但是还是不明白这之间的机制。 : ...................
xhppl2515机器人#2 · 2010/12/29
【 在 wangjianzhou 的大作中提到: 】 : 建议同学还是好好的看看ASP.NET的页面生命周期,你的问题有点模糊,我不是很明白,我简单给给你说 : 一下,ASP.NET的生命周期和我能看懂你问题的答案。 : 对于你这个页面,点击提交后,页面的生命周期如下: : ................... 十分十分感谢,我写的确实不怎么清楚,刚开始用,自己也不知道该怎么表达,不过问题已经解决了,而问题也确实就在生命周期上,谢谢啦~