小心使用Asp:TextBox的ReadOnly属性
昨天下午的考试系统代码代码走查中,发现一个很小的Bug,如下图所示:当文本框获得焦点后,弹出日期控件,根据选择,将日期显示在文本框中。但是,这里发现:日期是可以胡乱修改的哦!
那么,我该如何解决这个问题呢?当初在思考问题的时候,共提供两种解决方案:
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");这样就不会影响后台取值了。
总结:学习的过程中不要为了实现某种功能,而只是简简单单的“使用”,还要理清知识点之间的联系。所有的知识都有他们的共性。这样才能够达到简化知识点的目的,用起来才能得心应手。
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。