首页 > Web开发 > 详细

小心使用Asp:TextBox的ReadOnly属性

时间:2014-02-14 20:39:40      阅读:504      评论:0      收藏:0      [点我收藏+]

    

    昨天下午的考试系统代码代码走查中,发现一个很小的Bug,如下图所示:当文本框获得焦点后,弹出日期控件,根据选择,将日期显示在文本框中。但是,这里发现:日期是可以胡乱修改的哦!

bubuko.com,布布扣

那么,我该如何解决这个问题呢?当初在思考问题的时候,共提供两种解决方案:
    1、文本框的内容是可以手动输入的,但是需要对输入的内容进行验证:看看是否符合“日期”格式。
    2、控制文本框只能选择日期控件,不能手动输入。

接下来,便是根据自己的思路去网上求助:
    首先是,第一种解决思想:你可以在“开始日期”一栏中,手动输入日期。但是需要对输入的信息进行验证,这里主要采用:RegularExpressionValidator验证控件,同时要使用“正则表达式”。通过在网上检索“月/日/年 正则表达式”,发现这个日期格式的表达式好复杂呀?!首先,每个月份的天数不一样,同时,还要分为:平年和闰年。光表达式就有三行之多。还是,否决了吧。
    第二种解决思想:控制文本只能选择,不能输入。就是说:文本框可以获得焦点(focus可用)。但是不能键入,就是文本为空,难道要.text=""?怎么可能?!于是,按照自己的思维又搜索了一番。仍然没有解决。

    后来,去找八期的刘艳玲学姐商量,是否存在一种更好的解决办法的思想呢?“也许可以用文本框键入焦点后,禁止键盘事件,只能用鼠标进行点击。”虽然,最终没有按照这种思想来实现。但毕竟是一种新型的思考问题的方式,这里表示赞同。

    最终解决方案:ReadOnly属性=“true”。让文本框变得只读,便可以解决此问题。引起我思考的是:明明是这么一个简单的属性,为什么当初我没有想到呢?《机房收费系统》中,明明已经反复使用了数百遍,但是还是没有这个意识呢?

    举个例子:只让文本框实现显示功能,不能对内容进行修改。你可以使用.Enabled属性=False;也可以使用。ReadOnly属性=False。于是,我就随便选了一个,而并没有想要弄清楚两者之间有什么区别?这就导致了,在知识的学习过程中,把知识点割裂开来,没有形成一张“网”。
    
    接下来又是遇到了新的问题,虽然用ReadOnly达到了不能手动输入的目的。但是,又出现了新的问题,后台无法获得文本框中的日期。
    在.Net 1.1和.Net 2.0平台下TextBox控件的ReadOnly属性用法有所不同。在.Net 1.1平台下,我们直接把TextBox控件的ReadOnly属性设置为True,在后台是可以取到值的。但是在.Net 2.0平台下这样直接设置是取不到值的,这是因为.Net 2.0平台为了安全性考虑,在服务器端不处理只读文本框, 我们可以动态改变TextBox的ReadOnly属性,例:TextBox1.Attributes.Add("readonly","true");这样就不会影响后台取值了。

总结:学习的过程中不要为了实现某种功能,而只是简简单单的“使用”,还要理清知识点之间的联系。所有的知识都有他们的共性。这样才能够达到简化知识点的目的,用起来才能得心应手。

           



小心使用Asp:TextBox的ReadOnly属性

原文:http://blog.csdn.net/zhaolijing2012/article/details/19171495

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!