3.1 asp.net解决了asp的难题:验证表单填写的正确性 如今的商业网站,或者个人网站,多少都有客户调查啊,用户注册之类的东西,必然会用到表单,这些表单的填写正确与否,明显是由手写代码的方式来控制的。我承认编写代码,是一项有趣的工作,不过每次验证表单都来手写代码,我们希望提高我们的工作效率,并不是把我们很有限的时间花在表单的验证工作上。
基于另外的一些原因,web应用程序很不好验证用户的输入,html 3.2 规范可以让你控制用户的反馈,但恶意的或者技术高超的用户可以绕过,因此即使有了浏览器端的手写代码,服务器端同样也需要验证,才能保证安全。
下面是微软的工作人员,给出的商业网站用手写代码控制表单验证的弊病。
1. 尽管错误信息或图标经常与输入元素相邻,但是它们几乎总是位于表的不同单元格中。
2. 页面中经常会有一个区域来汇总所有错误。
3. 许多站点包含客户端脚本,以便提供更快捷的反馈,同时防止白白地在与服务器之间往返。
4. 许多包含客户端脚本的站点在出现错误时会显示信息框。
5. 不仅会验证文本输入,还会验证下拉列表和单选按钮。
6. 如果某个字段为空,站点通常会显示与该条目无效时不同的信息或图标。
7. 许多有效性检查可以很好地代替常用的表达式。
8. 验证通常是基于两个输入之间的比较结果。
9. 90% 或 90% 以上的验证任务是一些常见的操作,例如检查姓名或邮政编码。大多数站点似乎仍在重复进行这些工作。
10. 因为站点之间的差别通常太大,无法获得一种完美的解决方案来处理每个站点的所有验证任务。
如果你想向你的同事证实你有一种很"酷"的方法,可以禁止在姓名字段里面输入空值,记得选择asp.net,并且看下面的教程。
1. aspx文件被编译,运行
2. 用户输入数据
3. 触发page_load事件
4. 更改web控件属性,提示哪里没有输入
5. 将页面用html重新输出给用户
6. 再次提醒用户输入
3.3 page_load 过程
page 对象包含一些与服务器端验证有关的重要属性和方法。下表列出了page_load属性的所有collect和methed。
| page_load方法名 | 说明 |
| isvalid(最经常使用) | 这是最有用的属性。该属性可以检查整个表单是否有效。通常在更新数据库之前进行该检查。只有 validators 集中的所有对象全部有效,该属性才为真,并且不将该值存入缓存 。 |
| validators | 该页所有验证对象的集合。这是实现 ivalidator 界面的对象的集合。 |
| validate | 在验证时调用的一种方法。在 page 对象上默认的执行方式是转至每个验证器,并要求各验证器自行评估。 |
3.4 用来验证表单的验证器(web控件)
| requiredfieldvalidator | 检查用户是否输入或选择了任何内容 |
| regularexpressionvalidator | 根据规则表达式检查用户输入。该过程允许进行许多种类的检查,可以用于邮政编码和电话号码等的检查。 |
| comparevalidator | 将输入控件与一个固定值或另一个输入控件进行比较。例如,它可以用在口令验证字段中。也可以用来比较输入的日期和数字。 |
| rangevalidator | 与 comparevalidator 非常相似, 只是它用来检查输入是否在两个值或其它输入控件的值之间。 |
| customvalidator | 允许用户编写自己的代码以加入到验证框架中。 |
3.5 实例说明上面所描述的控件的运作
| <p>请输入新的用户 id 和口令</p> <form runat=server> <table> <tr> <td>用户 id </td> <td><input type=text runat=server id=txtname></td> </tr> <tr> <td>口令 </td> <td><input type=password runat=server id=txtpword></td> </tr> <tr> <td>请重新输入口令 </td> <td><input type=password runat=server id=txtrepword></td> </tr> <table><br> <input type=submit runat=server id=cmdsubmit value=submit> </form> |
| <tr> <td> <asp:requiredfieldvalidator runat=server controltovalidate=txtname errormessage="需要用户用户名。"> * </asp:requiredfieldvalidator> </td> <td>user id:</td> <td><input type=text runat=server id=txtname></td> </tr> |
| <asp:validationsummary runat=server headertext=此页有错误:/> |
| <td> <input type=text runat=server id=txtname> <asp:regularexpressionvalidator runat=server controltovalidate="txtname" errormesage="口令必须由 6-10 个字母组成。" validationexpression="[a-za-z]{6,10}" /> </td> |
| <asp:regularexpressionvalidator runat=server display=dynamic controltovalidate="txtpword" errormessage="口令必须包含 @#$%^&*/ 中的一个。" validationexpression=".*[@#$%^&*/].*" /> <asp:regularexpressionvalidator runat=server display=dynamic controltovalidate="txtpword" errormessage="口令必须是 4-12 个非空白字母。" validationexpression="[\s{4,12}" /> <asp:comparevalidator runat=server controltovalidate=txtrepword controltocompare=txtpword errormessage="口令不匹配。" /> |
| <script language="javascript" src="/_aspx/1.0.9999/script/webuivalidation.js"> </script> |
| <webcontrols clientscriptslocation="/_aspx/{0}/script/" /> |
鼓励您阅读该脚本,以便深入了解发生的事件。不过,建议您不要修改这些脚本,因为它们的功能与特定的运行时版本紧密相连。在运行时版本更新时,这些脚本可能也需要相应的更新,您将或者放弃更改,或者面临脚本不工作的问题。如果特定项目必须更改这些脚本,先备份这些脚本,然后将您的项目指向备份文件,方法是使用私有的 config.web 文件替代这些文件的位置。如果字符串中包含格式指令 "{0}",运行时版本号将替换该指令。最好将该位置更改为一个相对引用或绝对引用。
3.7 一个完整的案例
我们现在要做一个杂志订阅系统,要用户输入email,输入两次密码,密码要一样,密码要求安全,所以必须包括(!@#$%^&*+;:),输入用户的电话,最长20位,必须选择信用卡,输入卡号,卡号为15位,程序如下,好简单的,大家看看。
<%
public sub onsubmit(source as object, e as eventargs)
if page.isvalid then
'数据入库等操作
end if
end sub
%>
<h3><font face="verdana">订阅时尚生活杂志</font></h3>
<form runat=server>
<hr width=600 size=1 noshade>
<center>
<asp:validationsummary id="valsum" runat="server"
headertext="您必须填写完整所有的选项"
displaymode="singleparagraph"
font-name="verdana"
font-size="12"
/>
<p>
<!-- sign-in -->
<table border=0 width=600>
<tr><td colspan=3>
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tr><td>
<font face=geneva,arial size=-1><b>sign-in information</b>
</font>
</td></tr>
</table>
</td></tr>
<tr>
<td align=right>
<font face=arial size=2>输入您的email</font>
</td>
<td>
<asp:textbox id=email width=200px maxlength=60 runat=server />
</td>
<td>
<asp:requiredfieldvalidator id="emailreqval"
controltovalidate="email"
errormessage="您的email. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
<asp:regularexpressionvalidator id="emailregexval"
controltovalidate="email"
display="static"
validationexpression=
"^[\w-]+@[\w-]+\.(co.netorgedumil)$"
font-name="arial" font-size="11"
runat=server>
不是一个正确的email 请输入一个正确的email
</asp:regularexpressionvalidator>
</td>
</tr>
<tr>
<td align=right>
<font face=arial size=2>密码:</font>
</td>
<td>
<asp:textbox id=passwd textmode="password" maxlength=20
runat=server/>
</td>
<td>
<asp:requiredfieldvalidator id="passwdreqval"
controltovalidate="passwd"
errormessage="密码. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
<asp:regularexpressionvalidator id="passwdregexbal"
controltovalidate="passwd"
validationexpression=".*[!@#$%^&*+;:].*"
display="static"
font-name="arial" font-size="11"
width="100%" runat=server>
密码必须包括下面中的一个 (!@#$%^&*+;:)
</asp:regularexpressionvalidator>
</td>
</tr>
<tr>
<td align=right>
<font face=arial size=2>请再输入一次密码:</font>
</td>
<td>
<asp:textbox id=passwd2 textmode="password" maxlength=20
runat=server/>
</td>
<td>
<asp:requiredfieldvalidator id="passwd2reqval"
controltovalidate="passwd2"
errormessage="再输入一次密码. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
<asp:comparevalidator id="comparevalidator1"
controltovalidate="passwd2" controltocompare="passwd"
display="static"
font-name="arial" font-size="11"
runat=server>
两次输入的密码怎么不一样:)
</asp:comparevalidator>
</td>
</tr>
<tr><td colspan=3> </td></tr>
<!-- personalization information -->
<tr><td colspan=3>
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tr><td><font face=geneva,arial size=-1>
<b>personal information</b></font>
</td></tr>
</table>
</td></tr>
<tr>
<td align=right>
<font face=arial size=2>电话:</font>
</td>
<td>
<asp:textbox id="phone" maxlength=20 runat="server" />
</td>
<td>
<asp:requiredfieldvalidator id="phonereqval"
controltovalidate="phone"
errormessage="phone. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
</td>
</tr>
<tr><td colspan=3> </td></tr>
<!-- credit card info -->
<tr>
<td colspan=3>
<font face=arial size=2><b>credit card information</b></font>
</td>
</tr>
<tr>
<td align=right>
<font face=arial size=2>card type:</font>
</td>
<td>
<asp:radiobuttonlist id=cctype
font-name="arial" repeatlayout="flow" runat=server>
<asp:listitem>招商银行一卡通</asp:listitem>
<asp:listitem>建设银行龙卡</asp:listitem>
</asp:radiobuttonlist>
</td>
<td>
<asp:requiredfieldvalidator id="cctypereqval"
controltovalidate="cctype"
errormessage="信用卡种类. "
display="static"
initialvalue=""
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
</td>
</tr>
<tr>
<td align=right>
<font face=arial size=2>card number:</font>
</td>
<td>
<asp:textbox id=ccnum runat=server />
</td>
<td>
<asp:requiredfieldvalidator id="ccnumreqval"
controltovalidate="ccnum"
errormessage="信用卡号. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
<asp:regularexpressionvalidator id="ccnumcustval"
controltovalidate="ccnum"
display="static"
validationexpression="^\d{15}$"
font-name="arial" font-size="11"
runat=server>
信用卡号错误
</asp:regularexpressionvalidator>
</td>
</tr>
</table>
<p>
<input runat="server" type=submit value="注册">
<p>
</form>
</center>
好了,表单的验证,我们就讲到这里,下一讲,我们将介绍asp.net处理数据的核心部分,数据绑定
我们现在要做一个杂志订阅系统,要用户输入email,输入两次密码,密码要一样,密码要求安全,所以必须包括(!@#$%^&*+;:),输入用户的电话,最长20位,必须选择信用卡,输入卡号,卡号为15位,程序如下,好简单的,大家看看。
<%
public sub onsubmit(source as object, e as eventargs)
if page.isvalid then
'数据入库等操作
end if
end sub
%>
<h3><font face="verdana">订阅时尚生活杂志</font></h3>
<form runat=server>
<hr width=600 size=1 noshade>
<center>
<asp:validationsummary id="valsum" runat="server"
headertext="您必须填写完整所有的选项"
displaymode="singleparagraph"
font-name="verdana"
font-size="12"
/>
<p>
<!-- sign-in -->
<table border=0 width=600>
<tr><td colspan=3>
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tr><td>
<font face=geneva,arial size=-1><b>sign-in information</b>
</font>
</td></tr>
</table>
</td></tr>
<tr>
<td align=right>
<font face=arial size=2>输入您的email</font>
</td>
<td>
<asp:textbox id=email width=200px maxlength=60 runat=server />
</td>
<td>
<asp:requiredfieldvalidator id="emailreqval"
controltovalidate="email"
errormessage="您的email. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
<asp:regularexpressionvalidator id="emailregexval"
controltovalidate="email"
display="static"
validationexpression=
"^[\w-]+@[\w-]+\.(co.netorgedumil)$"
font-name="arial" font-size="11"
runat=server>
不是一个正确的email 请输入一个正确的email
</asp:regularexpressionvalidator>
</td>
</tr>
<tr>
<td align=right>
<font face=arial size=2>密码:</font>
</td>
<td>
<asp:textbox id=passwd textmode="password" maxlength=20
runat=server/>
</td>
<td>
<asp:requiredfieldvalidator id="passwdreqval"
controltovalidate="passwd"
errormessage="密码. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
<asp:regularexpressionvalidator id="passwdregexbal"
controltovalidate="passwd"
validationexpression=".*[!@#$%^&*+;:].*"
display="static"
font-name="arial" font-size="11"
width="100%" runat=server>
密码必须包括下面中的一个 (!@#$%^&*+;:)
</asp:regularexpressionvalidator>
</td>
</tr>
<tr>
<td align=right>
<font face=arial size=2>请再输入一次密码:</font>
</td>
<td>
<asp:textbox id=passwd2 textmode="password" maxlength=20
runat=server/>
</td>
<td>
<asp:requiredfieldvalidator id="passwd2reqval"
controltovalidate="passwd2"
errormessage="再输入一次密码. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
<asp:comparevalidator id="comparevalidator1"
controltovalidate="passwd2" controltocompare="passwd"
display="static"
font-name="arial" font-size="11"
runat=server>
两次输入的密码怎么不一样:)
</asp:comparevalidator>
</td>
</tr>
<tr><td colspan=3> </td></tr>
<!-- personalization information -->
<tr><td colspan=3>
<table border=0 cellpadding=0 cellspacing=0 width="100%">
<tr><td><font face=geneva,arial size=-1>
<b>personal information</b></font>
</td></tr>
</table>
</td></tr>
<tr>
<td align=right>
<font face=arial size=2>电话:</font>
</td>
<td>
<asp:textbox id="phone" maxlength=20 runat="server" />
</td>
<td>
<asp:requiredfieldvalidator id="phonereqval"
controltovalidate="phone"
errormessage="phone. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
</td>
</tr>
<tr><td colspan=3> </td></tr>
<!-- credit card info -->
<tr>
<td colspan=3>
<font face=arial size=2><b>credit card information</b></font>
</td>
</tr>
<tr>
<td align=right>
<font face=arial size=2>card type:</font>
</td>
<td>
<asp:radiobuttonlist id=cctype
font-name="arial" repeatlayout="flow" runat=server>
<asp:listitem>招商银行一卡通</asp:listitem>
<asp:listitem>建设银行龙卡</asp:listitem>
</asp:radiobuttonlist>
</td>
<td>
<asp:requiredfieldvalidator id="cctypereqval"
controltovalidate="cctype"
errormessage="信用卡种类. "
display="static"
initialvalue=""
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
</td>
</tr>
<tr>
<td align=right>
<font face=arial size=2>card number:</font>
</td>
<td>
<asp:textbox id=ccnum runat=server />
</td>
<td>
<asp:requiredfieldvalidator id="ccnumreqval"
controltovalidate="ccnum"
errormessage="信用卡号. "
display="dynamic"
font-name="verdana" font-size="12"
runat=server>
*
</asp:requiredfieldvalidator>
<asp:regularexpressionvalidator id="ccnumcustval"
controltovalidate="ccnum"
display="static"
validationexpression="^\d{15}$"
font-name="arial" font-size="11"
runat=server>
信用卡号错误
</asp:regularexpressionvalidator>
</td>
</tr>
</table>
<p>
<input runat="server" type=submit value="注册">
<p>
</form>
</center>
好了,表单的验证,我们就讲到这里,下一讲,我们将介绍asp.net处理数据的核心部分,数据绑定
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器