CreateUserWizard控件属性非常多,如何使用CreateUserWizard控件:
CreateUserWizard控件会输出一个用户注册表单。如果用户成功提交了该表单,那么一个新用户将添加到网站中。在后台,CreateUserWizard控件使用ASP.NET Membership来创建新用户。
CreateUserWizard控件支持大量的属性(由于属性实在太多,因此不再一一列举),通过这些属性我们可以修改该控件的外观和行为。例如,代码清单1-12中的页面使用了CreateUserWizard控件的几个属性来自定义控件的外观输出。
代码清单1-12 ShowCreateUserWizard.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">
.createUser
{
width:350px;
font:14px Verdana,Sans-Serif;
background-color:lightblue;
border:solid 3px black;
padding:4px;
}
.createUser_title
{
background-color:darkblue;
color:white;
font-weight:bold;
}
.createUser_instructions
{
font-size:12px;
text-align:left;
padding:10px;
}
.createUser_button
{
border:solid 1px black;
padding:3px;
}
</style>
<title>Show CreateUserWizard</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CreateUserWizard
id="CreateUserWizard1"
ContinueDestinationPageUrl="~/Default.aspx"
InstructionText="Please complete the following form
to register at this Website."
CompleteSuccessText="Your new account has been
created. Thank you for registering."
CssClass="createUser"
TitleTextStyle-CssClass="createUser_title"
InstructionTextStyle-CssClass="createUser_instructions"
CreateUserButtonStyle-CssClass="createUser_button"
ContinueButtonStyle-CssClass="createUser_button"
Runat="server" />
</div>
</form>
</body>
</html>
代码清单1-12中的CreateUserWizard控件通过CSS进行了定制(见图1-6)。需要注意的是,该控件的ContinueDestinationPageUrl属性被设置为了"~/Default.aspx"。当用户注册成功后,将会被重定向到该Default.aspx页面。
图1-6 定制CreateUserWizard控件
注解 我们可以通过微软.NET Framework SDK 2.0 文档来了解CreateUserWizard控件所支持的完整属性列表。
1.3.1 配置自定义用户表单字段
在默认情况下,CreateUserWizard控件将会显示下列表单字段:
q Username
q Password
q Confirm Password
q Email
q Security Question
q Security Answer
以上是默认提供的表单项,最后三项是可选的。
如果不需要用户输入电子邮件地址或安全问题提示及答案,那么就需要修改默认的Membership接口提供器。代码清单1-13中的Web配置文件,配置了CreateUserWizard控件是否需要电子邮件地址和安全问题提示及答案表单项。
代码清单1-13 Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<authentication mode="Forms" />
<membership defaultProvider="MyMembership">
<providers>
<add
name="MyMembership"
type="System.Web.Security.SqlMembershipProvider"
connectionStringName="LocalSqlServer"
requiresQuestionAndAnswer="false"
requiresUniqueEmail="false" />
</providers>
</membership>
</system.web>
</configuration>
如果将代码清单1-13中的Web配置文件加入应用程序中,那么CreateUserWizard控件将不会输出安全问题提示及答案表单项。但其仍会输出一个电子邮件表单项。如果连电子邮件地址表单项也不需要输出,那么还需要做一些额外的操作。必须将CreateUserWizard控件的RequireEmail属性设置为false。
如果将代码清单1-14中的页面加入使用代码清单1-13中Web配置文件的应用程序中,那么电子邮件地址、安全问题提示和安全问题答案表单项就都不会显示(见图1-7)。
图1-7 精简版的用户注册表单
代码清单1-14 CreateUserWizardShort.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>CreateUserWizard Short</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CreateUserWizard
id="CreateUserWizard1"
RequireEmail="false"
Runat="server" />
</div>
</form>
</body>
</html>
注意 当Membership接口提供器的requireUniqueEmail属性被设为true值时,请不要将CreateUserWizard控件的RequireEmail属性设为false值。换句话说,就是在不给用户提供电子邮件地址输入表单项时,不要让用户提供电子邮件地址。
1.3.2 发送已创建用户电子邮件通知
可以通过配置CreateUserWizard控件,使其在注册新用户后自动地发送电子邮件通知。例如,可以向该用户电子邮件地址发送一封包含了新注册用户的用户名和密码的通知邮件。
注意 通过互联网来发送包含用户密码的未加密电子邮件是非常危险的。然而,这样发送包含密码的注册确认邮件也是目前很普遍的行为。
代码清单1-15中的页面包含MailDefinition属性,该属性用来表示当用户成功注册后,向该用户发送的确认电子邮件的定义。
代码清单1-15 CreateUserWizardEmail.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>CreateUserWizard Email</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CreateUserWizard
id="CreateUserWizard1"
Runat="server">
<MailDefinition
BodyFileName="Register.txt"
Subject="Registration Confirmation"
From="Admin@YourSite.com" />
</asp:CreateUserWizard>
</div>
</form>
</body>
</html>
该MailDefinition类支持下列属性:
q BodyFileName——用于指定电子邮件通知正文内容的文件路径;
q CC——用于表示抄送该电子邮件的邮件地址;
q EmbeddedObjects——用于在电子邮件中嵌入对象,例如图片、文档等;
q From——用于指定电子邮件的来源邮件地址;
q IsBodyHtml——用于指示是否发送HTML格式的电子邮件;
q Priority——用于指定电子邮件的发送优先级。可能取值为Hight、Low和Normal;
q Subject——用于指定电子邮件的标题。
在代码清单1-15中,关联到CreateUserWizard控件上的MailDefinition类将会通过电子邮件发送代码清单1-16中的文本文件内容。
代码清单1-16 Register.txt
Thank you for registering!
Here is your new username and password:
username: <% UserName %>
password: <% Password %>
这里需要注意的是,代码清单1-16中的电子邮件通知正文中包含了两个特殊的表达式:<% UserName %>和<% Password %>。当发送电子邮件时,系统会自动地将用户的注册用户名和密码替换到该表达式中(见图1-8)。
图1-8 收到的注册电子邮件通知
注解 我们也可以在电子邮件通知中,发送通过Membership提供器进行加密或散列过的用户密码。
MailDefinition类使用Web配置文件中smtp节点的定义来配置电子邮件服务器端。例如,在代码清单1-17 的Web配置文件中,示例了如何在互联网信息服务器端(IIS)上配置本地SMTP邮件服务器端,以供MailDefinition类发送电子邮件使用(我们可以从管理工具文件夹中打开IIS管理器,启用本地SMTP服务)。
代码清单1-17 Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.net>
<mailSettings>
<smtp deliveryMethod="PickupDirectoryFromIis"/>
</mailSettings>
</system.net>
<system.web>
<authentication mode="Forms" />
</system.web>
</configuration>
如果要连接位于另一台服务器端上的电子邮件服务器端,可以使用代码清单1-18中的Web配置文件。代码清单1-18中,节点smtp的定义中包含了一个用于指定电子邮件主机地址、用户名和密码的network节点。
代码清单1-18 Web.Config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.net>
<mailSettings>
<smtp>
<network
host="mail.YourServer.com"
userName="admin"
password="secret" />
</smtp>
</mailSettings>
</system.net>
<system.web>
<authentication mode="Forms" />
</system.web>
</configuration>
注解 如果要自定义CreateUserWizard控件发送的电子邮件通知的内容,那么我们可以处理CreateUserWizard控件提供的事件SendingMail。详细信息见1.3.3节中的页面CreateUserWizard- CodeConfirmation.aspx。
1.3.3 用户自动重定向来源页面
当用户通过页面Login.aspx中的表单成功登录后,将会自动地重定向回其请求的来源页面。另外,CreateUserWizard控件并不能自动地重定向到任何位置。如果你希望CreateUserWizard控件能像Login控件那样工作,则需要编写一定的代码。
代码清单1-19中的Login控件包含了一个用于连接到用户注册页面CreateUserWizard- Returen.aspx上的链接。在Page_Load()事件处理函数中,查询字符串参数ReturnUrl将被添加到该注册页面的链接上。
代码清单1-19 LoginReturn.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
string dest = Request.QueryString["ReturnUrl"];
Login1.CreateUserUrl = "~/CreateUserWizardReturn.aspx?ReturnUrl=" + Server.UrlEncode(dest);
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>Login Return</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Login
id="Login1"
CreateUserText="Register"
CreateUserUrl="~/CreateUserWizardReturn.aspx"
Runat="server" />
</div>
</form>
</body>
</html>
在使用代码清单1-19中的页面之前,需要将该页面重命名为Login.aspx。如果未认证用户访问了需要认证才能访问的页面,那么该用户访问请求就会被自动重定向到页面Login.aspx上,并且ReturnUrl参数也会自动添加到页面Login.aspx的访问路径之后。
代码清单1-20中的页面包含了一个CreateUserWizard控件,以及一个名为Page_Load()的事件处理函数。查询字符串参数ReturnUrl的值用来指定重定向时用户将会返回的原始请求页。
代码清单1-20 CreateUserWizardReturn.aspx
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
void Page_Load()
{
if (!Page.IsPostBack)
{
string dest = "~/Default.aspx";
if (!String.IsNullOrEmpty(Request.QueryString["ReturnURL"]))
dest = Request.QueryString["ReturnURL"];
CreateUserWizard1.ContinueDestinationPageUrl = dest;
}
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title>CreateUserWizard Return</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CreateUserWizard
id="CreateUserWizard1"
Runat="server" />
</div>
</form>
</body>
</html>
1.3.4 自动生成密码
有一部分网站在进行注册时候需要多个步骤。例如,要在eBay上注册一个新账号就必须要完成下列步骤:
(1) 仔细填写完成用户注册表单;
(2) 接收包含注册认证码的电子邮件;
(3) 将认证码填入指定表单中进行确认。
使用这样的注册方式可以检验用户输入的电子邮件地址是否有效。如果是无效的电子邮件地址,他就不能接收到注册认证码。
要实现这样的注册方案,就必须了解CreateUserWizard控件的下列三个属性:
q AutoGeneratePassword——用于指定控件是否自动产生新密码;
q DisableCreatedUser——用于禁止通过控件创建新用户账号;
q LoginCreateUser——用于在自动登录中保护新用户。
同时还可以发送两种类型的注册确认电子邮件通知。其一,可以自动生成新密码并将该密码发送给进行注册的用户。这种方式需要启用控件的AutoGeneratePassword属性,同时禁用其LoginCreateUser属性。
另外一种是让用户自己输入密码,然后在电子邮件的确认通知中发送特别的认证码。而这需要启用控件的DisableCreatedUser属性,并同时禁用LoginCreateUser属性。下面让我们分别对这些方案进行试验。
代码清单1-21中的页面包含了CreateUserWizard控件,但该控件并不输出密码表单项。该控件启用了AutoGeneratePassword属性,同时禁用了LoginCreateUser属性。在填写完成由CreateUserWizard控件输出的用户注册表单后,点击Continue按钮将会打开页面Login.aspx。
代码清单1-21 CreateUserWizardPasswordConfirmation.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>CreateUserWizard Password Confirmation</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:CreateUserWizard
id="CreateUserWizard1"
CompleteSuccessText="A confirmation email
containing your new password has been
sent to your email address."
AutoGeneratePassword="true"
LoginCreatedUser="false"
ContinueDestinationPageUrl="~/Login.aspx"
Runat="server">
<MailDefinition
From="Admin@YourSite.com"
BodyFileName="PasswordConfirmation.htm"
IsBodyHtml="true"
Subject="Registration Confirmation" />
</asp:CreateUserWizard>
</div>
</form>
</body>
</html>
注意 在启用了CreateUserWizard控件自动生成密码功能后,请不要再设置Membership接口提供器的passwordStrengthRegularExpression属性。
转自:http://www.cnblogs.com/lel1447/archive/2008/10/20/1315252.html