ASP.NET 成员资格 Part.4(ChangePassword、CreateUserWizard)

ChangePassword 控件

       ChangePassword 控件允许用户修改密码,它查询用户输入的用户名和旧密码,然后要求用户输入一个新的密码并确认这个密码。

<asp:ChangePassword ID="ChangePassword1" runat="server" BorderStyle="Groove" BackColor="AliceBlue">
    <MailDefinition From="pwd@apress.com" Subject="Changes in your profile" Priority="High" />
    <TitleTextStyle Font-Bold="true" Font-Underline="true" Font-Names="Verdana" ForeColor="Blue" />
</asp:ChangePassword>

image image

       这个控件也包含 MailDefinition 子元素,它的设置和 PasswordRecovery 控件一样,在完成修改后,如果这个 Web 应用程序配置了一个邮件服务器,它也可以自动发送邮件给用户。

 

       ChangePassword 控件一样可以通过属性、样式和基于模板的方法定制,但需要两个模板:

  • ChangePasswordTemplate:用户输入旧用户名和旧密码以及新密码和密码确认字段
  • SuccessTemplate:显示成功信息,告诉用户操作是否成功完成

       ChangePasswordTemplate 模板的行为和之前介绍过的控件大相径庭。你只要添加了合适的 ID 值和 CommandName,它的默认行为就会被激活

 

CreateUserWizard 控件

       CreateUserWizard 控件是登录控件中最强大的控件,它能让你几分钟之内就创建注册页面。这是一个双步骤的向导控件:输入普通的用户信息;显示确认信息。因为 CreateUserWizard 继承自 Wizard 控件,所以你可以任意添加向导步骤

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" BorderStyle="Ridge" BackColor="Aquamarine">
    <TitleTextStyle Font-Bold="true" Font-Names="Vendana" />
    <WizardSteps>
        <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
        </asp:CreateUserWizardStep>
        <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
        </asp:CompleteWizardStep>
    </WizardSteps>
</asp:CreateUserWizard>

image image image

 

       CreateUserWizard 控件默认外观也可以通过属性和样式来定制。实际上,它几乎包含了所有成员资格 API 控件的大部分字段。CreateUserWizardStep 步骤创建控件来收集必需的信息;ComplateWizardStep 步骤用来显示确认信息。你可以自己定制这两个步骤,但不能删除它们。使用模板时,你还要负责创建必需的控件

<asp:CreateUserWizard ID="CreateUserWizard1" runat="server" BorderStyle="Ridge" BackColor="Aquamarine">
    <TitleTextStyle Font-Bold="true" Font-Names="Vendana" />
    <WizardSteps>
        <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
            <ContentTemplate>
                <div align="center"><font face="Courier New">
                    User Name:<asp:TextBox runat="server" ID="UserName" /><br />
                    Password:<asp:TextBox runat="server" ID="Password" TextMode="Password" /><br />
                    Conform Password:<asp:TextBox runat="server" ID="ConformPassword" TextMode="Password" /><br />
                    Email:<asp:TextBox runat="server" ID="Email" /><br />
                    Security Question:<asp:TextBox runat="server" ID="Question" /><br />
                    Security Answer:<asp:TextBox runat="server" ID="Answer" /><br />
                    <asp:Literal runat="server" ID="ErrorMessage" EnableViewState="false" />
                </font></div>
            </ContentTemplate>
        </asp:CreateUserWizardStep>
 
        <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
            <ContentTemplate>
                Your account has been successfully created.
                <asp:Button ID="ContinueButton" CommandName="Continue" runat="server" Text="Continue" />
            </ContentTemplate>
        </asp:CompleteWizardStep>
    </WizardSteps>
</asp:CreateUserWizard>

 

       因为这是一个向导控件,所以第一步骤不需要任何按钮,向导会自动显示一个下一步按钮。第一步中有些控件是必需的,另一些则是可选的:

ID

类型

必需

注释

UserName TextBox 总是必需
Password TextBox 总是必需
ConfirmPassword TextBox 总是必需
Email TextBox CreateUserWizard 控件的 RequireEmail 为 true时必需
Question TextBox 底层成员资格提供程序需要一个密码问题时才是必需的
Answer TextBox 底层成员资格提供程序需要一个密码问题时才是必需的
ContinueButton 冒泡控件 不是必需的,但如果出现,需要设置 CommandName 为 Continue

 

       一旦开始创建额外的向导步骤,就需要捕获事件并在事件函数中执行一些动作。例如,如果从用户那收集了一些额外的数据,就需要在某些地方存储这些信息,因此需要对数据库执行一些 SQL 语句。

       下表列出了 CreateUserWizard 控件特有的事件(也继承了 Wizard 控件所有的事件):

事件

描述

ContinueButtonClick 向导最后一步单击“继续”按钮时触发
CreatingUser 控件通过成员资格创建一个新用户时触发
CreatedUser 成功创建用户后触发
CreatedUserError 用户没有成功创建时触发
SendingMail 如果配置了邮件服务器,在发送邮件之前触发,这样你可以修改邮件信息
SendMailError 发送邮件出错时触发,比如,邮件服务器无效

       CreatedUser 事件会在 CreateUserWizardStep 步骤成功之后立即触发。因此,如果想要在这个事件中保存额外的数据,必需在上面的步骤中收集这些信息。为了达到这个目的,只需在 <asp:CreateUserWizardStep> 标签之前放上其他向导步骤即可

<div>
    <!-- 在 CreateUserWizardStep 步骤之前插入额外步骤收集信息-->
    <asp:CreateUserWizard ID="CreateUserWizard1" runat="server" BorderStyle="Ridge" BackColor="Aquamarine">
        <TitleTextStyle Font-Bold="true" Font-Names="Vendana" />
        <WizardSteps>
            <asp:WizardStep ID="NameStep" AllowReturn="true">
                FirstName:<asp:TextBox ID="FirstNameText" runat="server" /><br />
                LastName:<asp:TextBox ID="LastNameTex" runat="server" /><br />
                Age:<asp:TextBox ID="AgeText" runat="server" />
            </asp:WizardStep>
 
            <asp:CreateUserWizardStep ID="CreateUserWizardStep1" runat="server">
                <ContentTemplate>
                    <div align="center"><font face="Courier New">
                        User Name:<asp:TextBox runat="server" ID="UserName" /><br />
                        Password:<asp:TextBox runat="server" ID="Password" TextMode="Password" /><br />
                        Conform Password:<asp:TextBox runat="server" ID="ConformPassword" TextMode="Password" /><br />
                        Email:<asp:TextBox runat="server" ID="Email" /><br />
                        Security Question:<asp:TextBox runat="server" ID="Question" /><br />
                        Security Answer:<asp:TextBox runat="server" ID="Answer" /><br />
                        <asp:Literal runat="server" ID="ErrorMessage" EnableViewState="false" />
                    </font></div>
                </ContentTemplate>
            </asp:CreateUserWizardStep>
 
            <asp:CompleteWizardStep ID="CompleteWizardStep1" runat="server">
                <ContentTemplate>
                    Your account has been successfully created.
                    <asp:Button ID="ContinueButton" CommandName="Continue" runat="server" Text="Continue" />
                </ContentTemplate>
            </asp:CompleteWizardStep>
        </WizardSteps>
    </asp:CreateUserWizard>
</div>

       现在,就可以在 CreatedUser 事件被控件触发时把额外的信息存储到数据存储中了:

protected void RegisterUser_CreatedUser(object sender, EventArgs e)
{
    short age;
    string firstName, lastName;
 
    // Find the correct wizard step.
    WizardStepBase step = null;
    for (int i = 0; i < CreateUserWizard1.WizardSteps.Count; i++)
    {
        if (CreateUserWizard1.WizardSteps[i].Name == "NameStep")
        {
            step = CreateUserWizard1.WizardSteps[i];
            break;
        }
    }
 
    if (step != null)
    {
        firstName = ((TextBox)step.FindControl("FirstNameText")).Text;
        lastName = ((TextBox)step.FindControl("LastNameText")).Text;
        age = short.Parse(((TextBox)step.FindControl("AgeText")).Text);
 
        // Store the information
        // This is just simple code you need to replace with code
        // for really storing the information
        System.Diagnostics.Debug.WriteLine(string.Format("{0} {1} {2}", firstName, lastName, age));
    }
}

posted on 2013-04-11 16:44  SkySoot  阅读(1439)  评论(0编辑  收藏  举报

导航