原以为很简单的东西,做了才知道不是那么回事啊! (遍历页面中的控件)

前段时间在闭关充电,这几天出关了,于是继续开始毕业设计之旅。

这次是做一个用户注册页面,布局是利用table,控件主要用label ,textbox和button,需要用户输入12项资料,然后按“提交”按钮,经过验证无误后插入数据库。

还有一个“重置”按钮。

 

首先,我的设想是用 javascript 和 服务器端验证结合,关于JS的话,还是等下次总结吧。

我先验证 所有textbox是不是有空的,如果有空,就提示用户必须填写完毕,问题就出在 遍历所有textbox控件 这里!

当时我写的代码大概如下,经历了几次修改,不过基本思路都没变

    protected void Button1_Click(object sender, EventArgs e)
    {
        bool IsOK = true;

        foreach (Control c in this.Controls)
        { 
            if (c.GetType() == typeof(TextBox))
            {
                if (c as Textbox).Text == "")
                {
                    IsOK = false;
                }
            }
        }

        if (IsOK == false)
        {
            Response.Write("<script>alert('请填写完所有资料');</script>");
        }

        //database utility goes here~
    }

虽然我觉得这代码应该没问题,不过确实很打击人啊,浏览器弄死都没alert出来个窗口

在我调试的时候,我发现程序重来就没有进入过如下这个循环:

            if (c.GetType() == typeof(TextBox))
            {
                if (c as Textbox).Text == "")
                {
                    IsOK = false;
                }
            }

 

 
 

也就是说,根本就没找到过一个类型为TextBox的控件!

 

 
 

我仔细看看,发现了有时候能找到System.Web.UI.LiteralControl,不知道是什么东西,等下来有空再去查资料。

我到网上找过遍历控件方面的文章,可发现他们的代码和我的思路一样,真不知道是我悲剧还是那些人作假?

最后看到有人说要用递归来做,但那人既没说清楚思路,也没上代码。

最后我鼓捣了半天,终于弄好了。

 

 
 

===================================我是分割线===================================

为了测试,我在页面上放了一个label,修改了页面的代码,让程序在某label上输出具体哪个TextBox是空的,空的是0,非空用1表示,

所以要输出一串12个字符的string.

 

 
 

1,页面加载的时候要先清空 label

    protected void Page_Load(object sender, EventArgs e)
    {
        lblss.Text = "";
    }

 

2,下面这个方法实现返回那个字符串,确定哪些textbox是空的,是测试成功与否的指示

    public string SubmitInfo(ControlCollection cc)
    {
        string s = "";
        foreach (Control c in cc)
        {
            if (c.HasControls())
            {
                SubmitInfo(c.Controls);
            }
            else
            {
                if (c.GetType() == typeof(TextBox))
                {
                    if ((c as TextBox).Text == "")
                    {
                        lblss.Text += "0";
                    }
                    else
                    {
                        lblss.Text += "1";
                    }
                }
            }

        }
        return s;
    }

 

3,根据上面方法返回的 string,如果包含有"0",就可以确定页面有空白的textbox,以及到底那个位置是空的(如果愿意,更可以动态提示用户“XX信息不为空”),

代码就不上了。

 

 

最后说点:动手之前我是很有信心的,认为遍历所有控件很简单,结果花了几个小时才搞定,╮(╯▽╰)╭

还有,网上很多资料都是忽悠人的,不能再轻易相信了。

特此总结,以备日后查看。

转载于:https://www.cnblogs.com/SeraphWU/archive/2010/02/09/1666731.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值