实例——输入文本,增加带有此文本的复选框
aspx生命周期:先执行PageLoad方法,然后才按照页面控件排布顺序,依次执行所请求的事件。
每一次浏览器提交表单/重新加载界面时,服务器接受浏览器之前的控件数据,并结合服务器站点中的此界面的原始界面一起编译,得到一个新界面,再返回给浏览器。
所以,若仅仅由页面控件事件去生成动态控件,由于重新加载的时候,这些动态控件不能作为控件信息保留(不存在与原始界面的控件)。所以,下次点击页面控件去生成动态控件时,也只有刚刚生成的动态控件。
1、PageLoad方法
最终效果
.aspx.cs代码如下:
protected void Page_Load(object sender, EventArgs e){//从暂存服务器控件把之前全部输入记录提取,并新建复选框//可以避免一重新加载界面,就全部消失if (TextBox2.Text != \"\"){string[] a = TextBox2.Text.Split(\'\\u0081\');for (int i = 0; i < a.Length; i++){if (a[i] != \"\"){CheckBox b;b = new CheckBox();b.Text = a[i];Panel1.Controls.Add(b);}}}//按照文本新建,也可以把这个放在按钮事件中//这里把按钮放空,只用来刷新界面。if (TextBox1.Text != \"\"){CheckBox b;b = new CheckBox();b.Text = TextBox1.Text;Panel1.Controls.Add(b);TextBox2.Text += TextBox1.Text;TextBox2.Text += \'\\u0081\';TextBox1.Text = \"\";}}
2、编程关键
关键在于认识到服务器控件可以保留上次表单的值,至于原因后续才讲。
编程思路:
从暂存服务器控件取值——》按照值添加新项——》从文本框读取值——》新添项并把值记录在暂存服务器控件中,以便下次使用。
经过上述过程,即使每次页面重新加载,都能保留操作结果,因为每次操作的记录都记载在一个暂存服务器控件中了。我们平时可以把它设置为不可见,以免干扰。
另外,经尝试,发现使用全局变量的方式不能存储值,后续继续探讨。
3、split方法
根据特定字符,把字符串拆分成多个小字符串;
如“3\\u0081”,按照“\\u0081来拆分”,则拆为\”3\”与\”“两个字符串,所以要出去空字符串;
另外,之所以是”\\u0081\”,这个是网页不能输入且没有意义的值;还可以用\”\\u0080\”
- 点赞
- 收藏
- 分享
- 文章举报
xiaoLongww发布了8 篇原创文章 · 获赞 0 · 访问量 71私信关注