asp.net高级教程(五)-实战篇(中)

【字号: 日期:2022-12-27浏览:32作者:雯心
asp.net高级教程(五)---实战篇(结合论坛用户操作谈asp.net表单验证)(中);;;做好准备工作,现在就要动真格的了,先让我们看看用户注册的实现。前边已经讲过,asp.net可以实现业务逻辑和html代码分离,那么让我们来看看到底是如何实现的,下面这个文件是用户注册的页面部分,原型是根据我站点的风格制作的:<%@Page language="c#" Codebehind="Register.cs" AutoEventWireup="false" Inherits="bbs.Register" %><%@Register Tagprefix="My" Namespace="bbs.uctrl"%><html><head><TITLE>新用户注册</TITLE><meta name=vs_targetSchema content="HTML 4.0"><link rel="stylesheet" href="images/style.css"><META http-equiv=Content-Type content="text/html; charset=gb2312">;;;;<meta name="GENERATOR" Content="Microsoft Visual Studio 7.0">;;;;<meta name="CODE_LANGUAGE" Content="C#"></head><script language=javascript>;;function OnPreview();;{;;;;divPreview.innerHTML = Form1.txtSignature.value ;;;}</script>;;<body>;;;;;;;;<form method="post" runat="server" ID=Form1>&nbsp;;;;;<My:MyHead id="myHead1" runat="server"></MY:MYHEAD><!----------------------外面表格形成边框--------------------------------------><table border='0' cellspacing=0;;;cellpadding='0' align='center'>;;<TBODY>;;;<tr>;;;<!-------------------左边竖线---------------------------------------------->;;;;;<td bgcolor='#0097c0' width='1'>;;;;;;;<img src='https://www.6hehe.com/bcjs/images/Shim.gif' width=1>;;;;;;</td>;;;;;;<td width=720 align=middle><br><br><br>;;;<!-------------------左边竖线----------------------------------------------><!--------------新用户注册开始---------------------------------------------->;;;;;;;;<table width=600 align=center border=0 cellpadding=4 cellspacing=1 id="tblRegister" class=cn bgcolor=#000000 runat=server><TBODY><tr bgcolor=#ffffff>;;;;<td colspan=3><p align=center>新用户注册</p>;;;;</td></tr><!--------------用户名开始--------------------------------------------------------><tr bgcolor=#ffffff>;;;;<td width=60>用户名;;;;</td>;;;;<td width=300><asp:TextBox id="txtUserName" maxlength=20 columns=20 runat="server"></asp:TextBox><font color=red>*</font>;;;;</td>;;;;<td width=240>用户笔名,4-20字符<asp:requiredfieldvalidator id="reqUserName" display=Dynamic;;;;controltovalidate="txtUserName" runat=Server>;;;;不能为空!</asp:requiredfieldvalidator><asp:regularexpressionvalidator id="regUserName" display=Dynamic;;;;controltovalidate="txtUserName" runat=Server validationexpression="[^']{4,20}">;;;;用户名非法!</asp:regularexpressionvalidator><asp:customvalidator id="cusUserName" controltovalidate="txtUserName" ;;;;onservervalidate="ValidUser" display=Dynamic runat=Server>;;;;该用户已存在。</asp:customvalidator>;;;;</td></tr><!--------------用户名结束--------------------------------------------------------><!--------------用户密码开始--------------------------------------------------------><tr bgcolor=#ffffff>;;;;<td width=60>密码;;;;</td>;;;;<td width=300><asp:TextBox id="txtPassword" maxlength=10 columns=10 ;;;;textmode=Password runat=server></asp:TextBox><font color=red>*</font>;;;;</td>;;;;<td width=240>用户密码,4-10字符<asp:requiredfieldvalidator id=Requiredfieldvalidator1 display=Dynamic;;;;controltovalidate="txtPassword" runat=Server>;;;;不能为空!</asp:requiredfieldvalidator><asp:regularexpressionvalidator id=Regularexpressionvalidator1 display=Dynamic;;;;controltovalidate="txtPassword" runat=Server validationexpression="[^']{4,10}">;;;;密码非法!</asp:regularexpressionvalidator>;;;;</td></tr><!--------------用户密码结束--------------------------------------------------------><!--------------验证密码开始--------------------------------------------------------><tr bgcolor=#ffffff>;;;;<td width=60>验证密码;;;;</td>;;;;<td width=300><asp:TextBox id=txtPassword1 maxlength=10 columns=10 ;;;;;textmode=Password runat=server></asp:TextBox><font color=red>*</font>;;;;</td>;;;;<td width=240>再次输入密码。<asp:comparevalidator id="comPassword" display=Dynamic ;controltocompare="txtPassword" controltovalidate="txtPassword1" runat=Server>;;;;两次录入的密码不同!</asp:comparevalidator>;;;;</td></tr><!--------------验证密码结束--------------------------------------------------------><!--------------email开始--------------------------------------------------------><tr bgcolor=#ffffff>;;;;<td width=60>Email;;;;</td>;;;;<td width=300><asp:TextBox id="txtEmail" maxlength=100 columns=30 runat=server></asp:TextBox>;;;;</td>;;;;<td width=240>您的电子邮件地址,您可以不填,但请不要胡填。<asp:regularexpressionvalidator id="regEmail" display=Dynamic ;;;;controltovalidate="txtEmail" validationexpression="[^']*" runat=Server>;;;;非法字符;;;;</asp:regularexpressionvalidator>;;;;</td></tr><!--------------email结束--------------------------------------------------------><!--------------个人主页开始--------------------------------------------------------><tr bgcolor=#ffffff>;;;;<td width=60>个人主页;;;;</td>;;;;<td width=300><asp:TextBox id="txtHomepage" maxlength=150 columns=30 runat=server></asp:TextBox>;;;;</td>;;;;<td width=240>您的主页,您可以不填,但请不要胡填。<asp:regularexpressionvalidator id="regHomepage" display=Dynamic ;;;;controltovalidate="txtHomepage" validationexpression="[^']*" runat=Server>非法字符。</asp:regularexpressionvalidator>;;;;</td></tr><!--------------个人主页结束--------------------------------------------------------><!--------------签名开始--------------------------------------------------------><tr bgcolor=#ffffff>;;;;<td width=60>签名;;;;</td>;;;;<td width=300><asp:TextBox id="txtSignature" maxlength=150 columns=30 rows=6 textmode=MultiLine runat=server></asp:TextBox>;;;;</td>;;;;<td width=240 valign=top><div id="divPreview">你可以制作自己的签名,不超过255个字符,不能用script。<br><br></div><br><input type=button id="btnPreview" value="预览" onclick="OnPreview()"><br><asp:regularexpressionvalidator id=Regularexpressionvalidator2 display=Dynamic ;;;;controltovalidate="txtSignature" validationexpression="[^']{0,255}" runat=Server>使用非法字符或超过255个字符。</asp:regularexpressionvalidator>;;;;</td></tr><!--------------签名结束--------------------------------------------------------><tr bgcolor=#ffffff>;;;;<td colspan=3 align=center><asp:button id="btnSubmit" text="确认";;onclick="OnSubmit" runat=Server></asp:button>;;;;</td></tr>;;;;</table><br><br><br><!----------------------------------新用户注册结束---------------------->;;;<!-------------------右边竖线---------------------------------------------->;;;;;<td bgcolor='#0097c0' width='1'>;;;;;;;<img src='https://www.6hehe.com/bcjs/images/Shim.gif' width=1>;;;;;;</td>;;;<!-------------------右边竖线---------------------------------------------->;;;;</tr>;;;;;;;;<!-------------------下边横线---------------------------------------------->;;;;<tr>;;;;;<td colspan=3 height=1 bgcolor=#0097c0><img src='https://www.6hehe.com/bcjs/images/shim.gif'width=1 height=1></td>;;;;;;;;</tr>;;;;<!-------------------下边横线----------------------------------------------></table>;;;;<My:bottom id="myBottom" runat="server"></My:bottom>;;;;</form>;;</BODY></HTML><!--------------------文件结束--------------------------------->;;;;怎么样,看上去很熟悉吧,除了页首两句及下面webform中带runat=server的webcontrol,是不是和普通的html一样?注意到页首第一句中的Codebehind="Register.cs"吗,它指定本页后面的代码文件是register.cs,这是asp.net提供的一种机制,它可以将业务逻辑隐藏在与.aspx同名的cs文件中,而运行时先把这个cs文件编译,这样不但可以提高运行效率,也使代码隐藏起来,避免了asp中由于系统漏洞而造成源码泄漏所造成的问题。那么,这个包含业务逻辑的代码文件是怎样的呢?下面是这个文件:namespace bbs{;;;;using System;;;;;using System.Collections;;;;;using System.ComponentModel;;;;;using System.Data.SQL;;;;;using System.Drawing;;;;;using System.Web;;;;;using System.Web.SessionState;;;;;using System.Web.UI;;;;;using System.Web.UI.WebControls;;;;;using System.Web.UI.HtmlControls;;;;;using bbs.uctrl ;;;;;//using bbs.MyClass ;;;;;using MyOwnClass ;;;;;/// <summary>;;;;///;;;;Summary description for Register.;;;;/// </summary>;;;;public class Register : System.Web.UI.Page;;;;{protected System.Web.UI.WebControls.Button btnSubmit;protected System.Web.UI.WebControls.TextBox txtHomepage;protected System.Web.UI.WebControls.TextBox txtEmail;protected System.Web.UI.WebControls.CompareValidator comPassword;protected System.Web.UI.WebControls.TextBox txtPassword1;protected System.Web.UI.WebControls.RegularExpressionValidator Regularexpressionvalidator1;protected System.Web.UI.WebControls.RequiredFieldValidator Requiredfieldvalidator1;protected System.Web.UI.WebControls.TextBox txtPassword;protected System.Web.UI.WebControls.CustomValidator cusUserName;protected System.Web.UI.WebControls.RegularExpressionValidator regUserName;protected System.Web.UI.WebControls.RequiredFieldValidator reqUserName;protected System.Web.UI.WebControls.Label lblMessage;protected System.Web.UI.WebControls.TextBox txtUserName;public MyHead myHead1 ;//构造函数public Register(){;;;;Page.Init += new System.EventHandler(Page_Init);}protected void Page_Load(object sender, EventArgs e){;;;;if (!IsPostBack);;;;{//// Evals true first time browser hits the page//;;;;}}protected void Page_Init(object sender, EventArgs e){;;;;//;;;;// CODEGEN: This call is required by the ASP+ Windows Form Designer.;;;;//;;;;InitializeComponent();;;;;this.myHead1.Position = 2 ;}/// <summary>///;;;;Required method for Designer support - do not modify///;;;;the contents of this method with the code editor./// </summary>private void InitializeComponent(){;;;;this.Load += new System.EventHandler (this.Page_Load);}//监测用户是否存在public bool ValidUser(Object sender , string value){;;;;BBSUser myUser = new BBSUser() ;;;;;bool bExists ;;;;;try;;;;{bExists = myUser.GetUser(this.txtUserName.Text) ;;;;;;;;;};;;;catch(Exception e)//如果出现异常;;;;{#if DEBUGResponse.Write (e.Message) ;return false ;#endifServer.Transfer("error.aspx") ;;;;;};;;;;;;;return !bExists ;;;;;}//提交按钮点击public void OnSubmit(Object sender , EventArgs e){;;;;if (Page.IsValid);;;;{//数据入库try{;;;;BBSUser myUser = new BBSUser() ;;;;;if(!myUser.GetUser(txtUserName.Text));;;;{myUser.CreateUser(BBSUser.CreateType.Create , txtUserName.Text , txtPassword.Text ,txtEmail.Text , txtHomepage.Text , "") ;;;;;}}catch(Exception exp){#if DEBUG;;;;Response.Write ("出现异常:" + exp.Message) ;;;;;return ;#endif//DEBUG;;;;Server.Transfer("error.aspx") ;};;;;}};;;;;;;;}};;;什么?还是看着眼熟?没错,是不是和前边我定义的那个类差不多?是,本来asp.net就是把这个页当作一个对象,注意类定义的那行代码:public class Register : System.Web.UI.Page , 前面你可以理解,是定义一个Register对象,那:号后面的System.Web.UI.Page是什么意思呢?它说明这个Regsiter类是System.Web.UI.Page类的派生类(子类),也就是说Register类除了自己成员变量、属性、方法外,还继承System.Web.UI.Page类的所有公共(public)或保护(protected)成员变量、属性和方法。明白了这些,你可以安心坐下来研究代码了,做好下面关于表单验证内容的学习准备。
相关文章: