背景说明:
在一个项目中,测试人员曾反映,一个注册页面,当提交注册的时候,提示必填项不能为空,于是根据提示填上所需信息,结果总是提示“密码、确认密码不能空”!密码早就填啦,怎么还报错?!如此反复,该同事恼火了,要开发人员马上解决这个Bug!!不然后面的功能没法测试。
问题分析:
1、其实,该注册页面,除了用户名、密码外,还有不少必填项,需要滚动条才能看到底部的提交按钮。
2、提交前会进行验证,包括客户端和服务器端验证。客户端采用JS统一进行非空验证;服务器端采用验证控件进行正则验证,例如格式、长度、范围等。
3、若必填项为空,则客户端JS只弹一次窗口,统一提示哪些项不能为空。(服务器端则不验证,减轻负担)
4、由于该注册页面基本上采用了Web控件,于是问题来了。当前端JS弹出提示信息后,TextBox控件,在Password模式下(TextMode="password"),会自动清空显示值。
5、结果,就出现文章开头的情况了。
解决方案:
一开始,没想到简洁的解决法,用JS把密码先保存在隐藏字段再赋值吧,还是不行。
网上搜好久,遇到类似问题的童鞋还真不少,就是没有有效的解决方案。但有个童鞋则自己想出了解决方法,赞一个!
(原文见:http://heiyelidexingxing.blog.163.com/blog/static/3157821120086153610519/)
关键代码如下:
//说明:TextBox1.Attributes["value"]="123456789";可给TextBox赋值。 //在TextBox的OnTextChanged事件中,添加 this.TextBox1.Attributes["value"] = this.TextBox1.Text; //或 this.TextBox1.Attributes["value"] = Request.Form[TextBox1.ClientID]; //即可。 //为稳妥起见,设置οnpaste="return false" oncut="return false" 让TextBox不可以粘贴、复制。