ASP.NET动态控件生成

实例——输入文本,增加带有此文本的复选框

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"

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值