17.7用户注册处理模块
17.7 用户注册处理模块
本节编写用户登录验证处理代码。这部分代码的功能是提供用户注册表单,并对获取的注册数据进行验证,确保只有合法用户才能成为新的系统会员。
17.7.1 编写用户注册界面
所谓用户注册界面,是指提供用户注册表单供用户注册为系统新会员。本项目的用户注册界面是由文件Register.aspx实现的,其主要功能是为用户提供信息输入表单,同时将输入数据提交到数据库,并判断该数据是否合法。
文件Register.aspx的主要实现代码如下。
<asp:ScriptManager ID="sm" runat="server" />
<asp:UpdatePanel ID="up" runat="server">
<ContentTemplate>
……
<td valign="top">用户名称:</td>
<td width="90%">
<asp:TextBox ID="tbUsername" runat="server" SkinID="mm" Width="60%" MaxLength="50">
</asp:TextBox>
<asp:Button ID="btnCheck" runat="server" Text="用户名检测" CausesValidation="False" OnClick="btnCheck_Click" SkinID="nn" />
<asp:Label ID="lbCheckResult" runat="server" ForeColor="Red"></asp:Label>
<asp:RequiredFieldValidator ID="rfNameBlank" runat="server"
ControlToValidate="tbUsername" Display="none" ErrorMessage="用户名称不能为空!">
</asp:RequiredFieldValidator>
<asp:RequiredFieldValidator
Display="none" InitialValue="请输入用户名称"
ErrorMessage="用户名称不能为空!">
</asp:RequiredFieldValidator>
<asp:RegularExpressionValidator ID="revName" runat="server"
ControlToValidate="tbUsername" Display="none"
ErrorMessage="用户名称的长度最大为50,请重新输入。"
ValidationExpression=".{1,50}">
</asp:RegularExpressionValidator>
<ajaxToolkit:TextBoxWatermarkExtender ID="wmeName" runat="server"
TargetControlID="tbUsername" WatermarkText="请输入用户名称"
WatermarkCssClass="Watermark">
</ajaxToolkit:TextBoxWatermarkExtender>
<ajaxToolkit:ValidatorCalloutExtender
ID="vceNameBlank" runat="server"
TargetControlID="rfNameBlank" HighlightCssClass="Validator">
</ajaxToolkit:ValidatorCalloutExtender>
<ajaxToolkit:ValidatorCalloutExtender
ID="vceNameValue" runat="server"
TargetControlID="rfNameValue"
HighlightCssClass="Validator">
</ajaxToolkit:ValidatorCalloutExtender>
<ajaxToolkit:ValidatorCalloutExtender
ID="vceNameRegex" runat="server"
TargetControlID="revName"
HighlightCssClass="Validator">
</ajaxToolkit:ValidatorCalloutExtender>
……
<td valign="top">用户密码:</td>
<td width="90%">
<asp:TextBox ID="tbPassword" runat="server" SkinID="mm" Width="60%" MaxLength="50" TextMode="Password">
</asp:TextBox><br />
<asp:Label ID="lbHelp" runat="server"></asp:Label>
<asp:RequiredFieldValidator ID="rfPwdBlank" runat="server" ControlToValidate="tbPassword" Display="none"
ErrorMessage="用户密码不能为空!">
</asp:RequiredFieldValidator>
<ajaxToolkit:ValidatorCalloutExtender ID="vcePwdBlank"
runat="server" TargetControlID="rfPwdBlank"
HighlightCssClass="Validator">
</ajaxToolkit:ValidatorCalloutExtender>
<ajaxToolkit:PasswordStrength ID="psPassword"
runat="server" TargetControlID="tbPassword"
DisplayPosition="RightSide" TextCssClass="PasswordStrengthText"
HelpHandlePosition="BelowLeft" HelpStatusLabelID="lbHelp"
MinimumNumericCharacters="2" MinimumSymbolCharacters="2"
PreferredPasswordLength="10" RequiresUpperAndLowerCaseCharacters="true"
StrengthIndicatorType="Text" TextStrengthDescriptions="很差;差;一般;好;很好"
CalculationWeightings="40;20;20;20">
</ajaxToolkit:PasswordStrength>
……
<td valign="top">确认密码:</td>
<td width="90%">
<asp:TextBox ID="tbPasswordStr" runat="server" SkinID="mm" Width="60%" MaxLength="50" TextMode="Password">
</asp:TextBox>
<asp:CompareValidator ID="cvPwd" runat="server"
ControlToValidate="tbPassword" ControlToCompare="tbPasswordStr"
Display="none" Operator="Equal"
ErrorMessage="两次输入的密码不相同,请重新输入。">
</asp:CompareValidator>
<ajaxToolkit:ValidatorCalloutExtender
ID="vcePassword" runat="server" TargetControlID="cvPwd"
HighlightCssClass="Validator">
</ajaxToolkit:ValidatorCalloutExtender>
</td>
</tr>
<tr bgcolor="white">
<td>验 证 码:</td>
<td>
<asp:TextBox ID="tbCode" runat="server" SkinID="mm" Width="80px"></asp:TextBox>
<asp:Image ID="imgCode" runat="server" ImageUrl = "Yanzhengma.aspx" />
上述代码执行后,将显示注册表单界面,如图17-10所示;如果用户输入非法数据,则将显示相应的提示信息,如图17-11所示。
图17-10 注册表单效果
图17-11 非法提示效果
17.7.2 注册数据处理
注册数据处理是指对注册用户输入的数据进行验证。如果输入的数据非法,则显示对应的提示信息;如果输入的数据合法,则将该数据添加到系统库中。本项目的注册数据处理功能是由文件Register.aspx.cs实现的,其主要实现代码如下。
protected void Page_Load(object sender, EventArgs e)
{
}
protected void btnCheck_Click(object sender,EventArgs e)
{ ///检查用户名称是否为空
if(string.IsNullOrEmpty(tbUsername.Text) == true)
{
lbCheckResult.Text = "很遗憾,您输入的用户名称为空,不能注册。请重新输入";
lbCheckResult.ForeColor = System.Drawing.Color.Red;
return;
}
///检查用户名称是否存在
UserDAL user = new UserDAL();
SqlDataReader dr = user.CheckUser(tbUsername.Text);
if(dr == null)
{ ///如果不存在,则可以使用
lbCheckResult.Text = "恭喜您,您选择的用户名称可以使用。";
lbCheckResult.ForeColor = System.Drawing.Color.Green;
return;
}
if(dr.Read())
{ ///如果存在,则不能注册
if(Int32.Parse(dr["UserCount"].ToString()) > 0)
{
lbCheckResult.Text = "很遗憾,您选择的用户名称已经被使用了。请重新选择";
lbCheckResult.ForeColor = System.Drawing.Color.Red;
}
else
{ ///如果不存在,则可以使用
lbCheckResult.Text = "恭喜您,您选择的用户名称可以使用。";
lbCheckResult.ForeColor = System.Drawing.Color.Green;
}
}
else
{ ///如果不存在,则可以使用
lbCheckResult.Text = "恭喜您,您选择的用户名称可以使用。";
lbCheckResult.ForeColor = System.Drawing.Color.Green;
}
dr.Close();
}
protected void btnRegister_Click(object sender,EventArgs e)
{ ///判断是否创建了验证吗
if(Session[ValidateCode.VALIDATECODEKEY] == null) return;
///验证验证码是否相等
if(tbCode.Text != Session[ValidateCode.VALIDATECODEKEY].ToString())
{
lbMessage.Text = "验证码输入错误,请重新输入。";
return;
}
///注册新用户
UserDAL user = new UserDAL();
if(user.AddUser(tbUsername.Text,tbPassword.Text) > 0)
{
lbMessage.Text = "恭喜您,注册成功!";
}
else
{
lbMessage.Text = "很遗憾,注册失败!";
}
上述代码的执行结果描述如下:如果输入的用户名没有被使用,则显示对应的提示信息,如图17-12所示;如果输入的用户名已被使用,则显示对应的提示信息,如图17-13所示;如果输入的用户名、密码、确认密码和验证码都正确,则会显示注册成功的提示,如图17-14所示。
图17-12 用户名合法提示
图17-13 用户名非法提示
图17-14 注册成功提示
上一篇:17.6用户登录处理模块
下一篇:17.8用户注销处理模块