1.6 使用ChangePassword控件
用户(或系统管理员)可以通过ChangePassword控件来修改用户密码。代码清单1-30中的页面展示了如何使用该控件。
代码清单1-30 ShowChangePassword.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<style type="text/css">
.changePassword
{
font:14px Verdana,Sans-Serif;
background-color:lightblue;
border:solid 3px black;
padding:4px;
}
.changePassword_title
{
background-color:darkblue;
color:white;
font-weight:bold;
}
.changePassword_instructions
{
font-size:12px;
text-align:left;
padding:10px;
}
.changePassword_button
{
border:solid 1px black;
padding:3px;
}
</style>
<title>Show ChangePassword</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:LoginName ID="LoginName1" runat="server" />
<asp:ChangePassword
id="ChangePassword1"
InstructionText="Complete this form to create
a new password."
DisplayUserName="true"
ContinueDestinationPageUrl="~/Default.aspx"
CancelDestinationPageUrl="~/Default.aspx"
CssClass="changePassword"
TitleTextStyle-CssClass="changePassword_title"
InstructionTextStyle-CssClass="changePassword_instructions"
ChangePasswordButtonStyle-CssClass="changePassword_button"
CancelButtonStyle-CssClass="changePassword_button"
ContinueButtonStyle-CssClass="changePassword_button"
Runat="server" />
</div>
</form>
</body>
</html>
代码清单1-30中的表单包含了输入用户名、旧密码、新密码和新密码确认四个表单项(见图1-13)。该表单提交后,用户的旧密码将更改为新密码。
需要注意的是,代码清单1-29中的ChangePassword控件包含了一个DisplayUserName属性。当启用这个属性后,控件将会输出用户名表单项。当在Web应用程序页面中放置密码保护项时,不需要包含DisplayUserName属性。因为在该示例中,ChangePassword控件将自动使用当前用户的名称。

图1-13 使用ChangePassword控件修改用户密码
1.6.1 发送电子邮件通知密码更改
当用户修改了密码后,可以通过该ChangePassword控件自动发送一封包含了新密码的电子邮件通知。代码清单1-31中的页面即包含了用于自动发送电子邮件通知的ChangePassword控件。
注解 即使用户的密码通过Membership提供器进行了加密或散列,仍然可以通过电子邮件通知进行发送。
代码清单1-31 ChangePasswordEmail.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>ChangePassword Email</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ChangePassword
id="ChangePassword1"
DisplayUserName="true"
Runat="server">
<MailDefinition
From="Admin@YourSite.com"
BodyFileName="ChangePassword.txt"
Subject="Your New Password" />
</asp:ChangePassword>
</div>
</form>
</body>
</html>
需要注意的是,代码清单1-31中的ChangePassword控件包含了一个MailDefinition属性,该属性用于定义ChangePassword控件将发送的电子邮件通知。代码清单1-32中的文本文件包含了该ChangePassword控件发送的电子邮件通知的内容。
代码清单1-32 ChangePassword.txt
<%UserName%>,
your new password is <%Password%>.
代码清单1-32中的电子邮件通知包含了两个特殊的表达式:<% UserName %>和<% Password %>。当发送电子邮件时,这两个表达式将使用该用户的用户名和密码来进行替换。
注解 MailDefinition类使用Web配置文件中smtp节点配置的电子邮件服务器端。要了解更多关于smtp节点的配置信息,可以见1.3.2节。
1.6.2 在ChangePassword控件中使用模板
如果要彻底修改ChangePassword控件的外观,那么可以使用模板来对该控件进行定制。ChangePassword控件支持ChangePasswordTemplate和SuccessTemplate两类模板。
代码清单1-33中的页面示例了如何使用ChangePassword控件所支持的这两类模板(见图1-14)。

图1-14 使用模板来自定义ChangePassword控件
代码清单1-33 ChangePasswordTemplate.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>ChangePassword Template</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:ChangePassword
id="ChangePassword1"
DisplayUserName="true"
Runat="server">
<ChangePasswordTemplate>
<h1>Change Password</h1>
<asp:Label
id="FailureText"
EnableViewState="false"
ForeColor="Red"
Runat="server" />
<br />
<asp:Label
id="lblUserName"
Text="User Name:"
AssociatedControlID="UserName"
Runat="server" />
<br />
<asp:TextBox
id="UserName"
Runat="server" />
<br /><br />
<asp:Label
id="lblCurrentPassword"
Text="Current Password:"
AssociatedControlID="CurrentPassword"
Runat="server" />
<br />
<asp:TextBox
id="CurrentPassword"
TextMode="Password"
Runat="server" />
<br /><br />
<asp:Label
id="lblNewPassword"
Text="New Password:"
AssociatedControlID="NewPassword"
Runat="server" />
<br />
<asp:TextBox
id="NewPassword"
TextMode="Password"
Runat="server" />
<br /><br />
<asp:Button
id="btnChangePassword"
Text="Change Password"
CommandName="ChangePassword"
Runat="server" />
</ChangePasswordTemplate>
<SuccessTemplate>
Your password has been changed!
</SuccessTemplate>
</asp:ChangePassword>
</div>
</form>
</body>
</html>
可以在ChangePasswordTemplate模板中使用以下特定ID的控件:
q UserName
q CurrentPassword
q ConfirmPassword
q NewPassword
q FailureText
同时还可以添加具有以下CommandName属性值的Button控件:
q ChangePassword
q Cancel
q Continue






