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


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

    这次是做一个用户注册页面,布局是利用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信息不为空”),

    代码就不上了。

     

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

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

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

  • 相关阅读:
    在web项目下注册MySQL数据库驱动失败
    Servlet 调用过程
    请求时参数到后台解码时会出现乱码问题
    Request 部分功能
    dom4j增删改查
    微信消息处理JAXP-sax解析
    微信消息处理JAXP-dom解析
    inputstream与其他格式的转换
    微信消息处理
    将Gridview导出到Excel
  • 原文地址:https://www.cnblogs.com/SeraphWU/p/1666731.html
Copyright © 2020-2023  润新知