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

做好准备工作,现在就要动真格的了,先让我们看看用户注册的实现。前边已经讲过,asp.net可以实现业务逻辑和html代码分离,那么让我们来看看到底是如何实现的,下面这个文件是用户注册的页面部分,原型是根据我站点的风格制作的:

1@Page language="c#" Codebehind="Register.cs" AutoEventWireup="false" Inherits="bbs.Register" 
1@Register Tagprefix="My" Namespace="bbs.uctrl"
  1<html><head>
  2<title>新用户注册</title>
  3<meta content="HTML 4.0" name="vs_targetSchema"/>
  4<link href="images/style.css" rel="stylesheet"/>
  5<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>
  6<meta content="Microsoft Visual Studio 7.0" name="GENERATOR"/>
  7<meta content="C#" name="CODE_LANGUAGE"/></head>
  8<script language="javascript">   
  9function OnPreview()   
 10{   
 11divPreview.innerHTML = Form1.txtSignature.value ;   
 12}   
 13</script>
 14<body>
 15<form id="Form1" method="post" runat="server">
 16<my:myhead id="myHead1" runat="server"></my:myhead>
 17<!----------------------外面表格形成边框-------------------------------------->
 18<table align="center" border="0" cellpadding="0" cellspacing="0" width="722">
 19<tbody>
 20<tr>
 21<!-------------------左边竖线---------------------------------------------->
 22<td bgcolor="#0097c0" width="1">
 23<img src="images/Shim.gif" width="1"/>
 24</td>
 25<td align="middle" width="720"><br/><br/><br/>
 26<!-------------------左边竖线---------------------------------------------->
 27<!--------------新用户注册开始---------------------------------------------->
 28<table align="center" bgcolor="#000000" border="0" cellpadding="4" cellspacing="1" class="cn" id="tblRegister" runat="server" width="600">
 29<tbody>
 30<tr bgcolor="#ffffff">
 31<td colspan="3">
 32<p align="center">新用户注册</p>
 33</td>
 34</tr>
 35<!--------------用户名开始-------------------------------------------------------->
 36<tr bgcolor="#ffffff">
 37<td width="60">   
 38用户名   
 39</td>
 40<td width="300">
 41<asp:textbox columns="20" id="txtUserName" maxlength="20" runat="server"></asp:textbox>
 42<font color="red">*</font>
 43</td>
 44<td width="240">   
 45用户笔名,4-20字符   
 46<asp:requiredfieldvalidator controltovalidate="txtUserName" display="Dynamic" id="reqUserName" runat="Server">   
 47不能为空!   
 48</asp:requiredfieldvalidator>
 49<asp:regularexpressionvalidator controltovalidate="txtUserName" display="Dynamic" id="regUserName" runat="Server" validationexpression="[^']{4,20}">   
 50用户名非法!   
 51</asp:regularexpressionvalidator>
 52<asp:customvalidator controltovalidate="txtUserName" display="Dynamic" id="cusUserName" onservervalidate="ValidUser" runat="Server">   
 53该用户已存在。   
 54</asp:customvalidator>
 55</td>
 56</tr>
 57<!--------------用户名结束-------------------------------------------------------->
 58<!--------------用户密码开始-------------------------------------------------------->
 59<tr bgcolor="#ffffff">
 60<td width="60">   
 61密码   
 62</td>
 63<td width="300">
 64<asp:textbox columns="10" id="txtPassword" maxlength="10" runat="server" textmode="Password"></asp:textbox>
 65<font color="red">*</font>
 66</td>
 67<td width="240">   
 68用户密码,4-10字符   
 69<asp:requiredfieldvalidator controltovalidate="txtPassword" display="Dynamic" id="Requiredfieldvalidator1" runat="Server">   
 70不能为空!   
 71</asp:requiredfieldvalidator>
 72<asp:regularexpressionvalidator controltovalidate="txtPassword" display="Dynamic" id="Regularexpressionvalidator1" runat="Server" validationexpression="[^']{4,10}">   
 73密码非法!   
 74</asp:regularexpressionvalidator>
 75</td>
 76</tr>
 77<!--------------用户密码结束-------------------------------------------------------->
 78<!--------------验证密码开始-------------------------------------------------------->
 79<tr bgcolor="#ffffff">
 80<td width="60">   
 81验证密码   
 82</td>
 83<td width="300">
 84<asp:textbox columns="10" id="txtPassword1" maxlength="10" runat="server" textmode="Password"></asp:textbox>
 85<font color="red">*</font>
 86</td>
 87<td width="240">   
 88再次输入密码。   
 89<asp:comparevalidator controltocompare="txtPassword" controltovalidate="txtPassword1" display="Dynamic" id="comPassword" runat="Server">   
 90两次录入的密码不同!   
 91</asp:comparevalidator>
 92</td>
 93</tr>
 94<!--------------验证密码结束-------------------------------------------------------->
 95<!--------------email开始-------------------------------------------------------->
 96<tr bgcolor="#ffffff">
 97<td width="60">   
 98Email   
 99</td>
100<td width="300">
101<asp:textbox columns="30" id="txtEmail" maxlength="100" runat="server"></asp:textbox>
102</td>
103<td width="240">   
104您的电子邮件地址,您可以不填,但请不要胡填。   
105<asp:regularexpressionvalidator controltovalidate="txtEmail" display="Dynamic" id="regEmail" runat="Server" validationexpression="[^']*">   
106非法字符   
107</asp:regularexpressionvalidator>
108</td>
109</tr>
110<!--------------email结束-------------------------------------------------------->
111<!--------------个人主页开始-------------------------------------------------------->
112<tr bgcolor="#ffffff">
113<td width="60">   
114个人主页   
115</td>
116<td width="300">
117<asp:textbox columns="30" id="txtHomepage" maxlength="150" runat="server"></asp:textbox>
118</td>
119<td width="240">   
120您的主页,您可以不填,但请不要胡填。   
121<asp:regularexpressionvalidator controltovalidate="txtHomepage" display="Dynamic" id="regHomepage" runat="Server" validationexpression="[^']*">   
122非法字符。   
123</asp:regularexpressionvalidator>
124</td>
125</tr>
126<!--------------个人主页结束-------------------------------------------------------->
127<!--------------签名开始-------------------------------------------------------->
128<tr bgcolor="#ffffff">
129<td width="60">   
130签名   
131</td>
132<td width="300">
133<asp:textbox columns="30" id="txtSignature" maxlength="150" rows="6" runat="server" textmode="MultiLine"></asp:textbox>
134</td>
135<td valign="top" width="240">
136<div id="divPreview">   
137你可以制作自己的签名,不超过255个字符,不能用script。<br/><br/>
138</div><br/>
139<input id="btnPreview" onclick="OnPreview()" type="button" value="预览"/><br/>
140<asp:regularexpressionvalidator controltovalidate="txtSignature" display="Dynamic" id="Regularexpressionvalidator2" runat="Server" validationexpression="[^']{0,255}">   
141使用非法字符或超过255个字符。   
142</asp:regularexpressionvalidator>
143</td>
144</tr>
145<!--------------签名结束-------------------------------------------------------->
146<tr bgcolor="#ffffff">
147<td align="center" colspan="3">
148<asp:button id="btnSubmit" onclick="OnSubmit" runat="Server" text="确认"></asp:button>
149</td>
150</tr>
151</tbody></table><br/><br/><br/>
152<!----------------------------------新用户注册结束---------------------->
153<!-------------------右边竖线---------------------------------------------->
154<td bgcolor="#0097c0" width="1">
155<img src="images/Shim.gif" width="1"/>
156</td>
157<!-------------------右边竖线---------------------------------------------->
158</td></tr>
159<!-------------------下边横线---------------------------------------------->
160<tr>
161<td bgcolor="#0097c0" colspan="3" height="1"><img height="1" src="images/shim.gif" width="1"/></td>
162</tr>
163<!-------------------下边横线---------------------------------------------->
164</tbody></table>
165<my:bottom id="myBottom" runat="server"></my:bottom>
166</form>
167</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 ;

///

1<summary>   
2/// Summary description for Register.   
3/// </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 ;
}

///

1<summary>   
2/// Required method for Designer support - do not modify   
3/// the contents of this method with the code editor.   
4/// </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 DEBUG
Response.Write (e.Message) ;
return false ;
#endif
Server.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)成员变量、属性和方法。明白了这些,你可以安心坐下来研究代码了,做好下面关于表单验证内容的学习准备。

Published At
Categories with Web编程
Tagged with
comments powered by Disqus