ASP.NET动态控件生成
程序员文章站
2023-12-28 10:48:16
...
实例——输入文本,增加带有此文本的复选框
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"