本次,我们主要来自定义一个用户创建的向导步骤。在上一个实验中,我们创建了一个 CreateUserWizard 控件,该控件具有两个基本步骤(CreateUserStep 和CompleteStep),本实验我们在此基础上创建一个添加在 CreateUserStep 之前的附加向导步骤定义的模板。
添加向导步骤
① 打开上次实验网页,向 CreateUserWizard 控件的 <WizardSteps> 节添加 <asp:WizardStep> 元素。在您的自定义 CreateUserWizard 控件将使用的附加向导步骤中包括任何控件和标记。
例如,下面的代码示例演示要添加在 CreateUserWizard 控件(该控件包含供用户输入用户名的文本框控件)的 CreateUserStep 之前的步骤。将检查用户名以确保该名称在成员资格数据库中不存在。
下面的代码示例演示 NextButtonClick 事件的处理程序,该处理程序使用在前一个代码示例的向导步骤的 TextBox 控件中输入的用户名,并验证该用户名,以确保它不是空白的并且在成员资格数据库中不存在。您将需要向页上的 CreateUserWizard 控件添加一个 OnNextButtonClick 属性,该控件引用 NextButtonClick 事件的处理程序(例如 OnNextButtonClick="CreateUserWizard1_NextButtonClick"。)
<asp:WizardStep ID="CreateUserWizardStep0" runat="server">
<table border="0" style="font-size:100%;font-family:Verdana" id="TABLE2">
<tr>
<td align="center" colspan="2" style="font-weight:bold;color:white;background-color:#5d7b9d">
Select an Account Name
</td>
</tr>
<tr>
<td>
<asp:Label ID="AccountNameLabel" runat="server" AssociatedControlID="SearchAccount">
Account Name:
</asp:Label>
<asp:TextBox ID="SearchAccount" runat="server"></asp:TextBox><br />
<asp:Label ID="SearchAccountMessage" runat="server" ForeColor="Red"></asp:Label>
</td>
</tr>
</table>
</asp:WizardStep>
②添加向导步骤的代码。可以处理 Wizard 控件的 NextButtonClick 事件以执行您的代码。CurrentStepIndex 属性值通过步骤索引号(从代表第一个步骤的 0 开始)来指示哪个附加向导步骤引发了 NextButtonClick 事件。
下面的代码示例演示 NextButtonClick 事件的处理程序,该处理程序使用在前一个代码示例的向导步骤的 TextBox 控件中输入的用户名,并验证该用户名,以确保它不是空白的并且在成员资格数据库中不存在。您将需要向页上的 CreateUserWizard 控件添加一个 OnNextButtonClick 属性,该控件引用 NextButtonClick 事件的处理程序(例如 OnNextButtonClick="CreateUserWizard1_NextButtonClick"。)
选中左侧的 CreateUserWizard 控件,双击触发右侧属性面板中的 NextButtonClick 事件。
protected void CreateUserWizard1_NextButtonClick(object sender, WizardNavigationEventArgs e)
{
if(e.CurrentStepIndex==0)
{
if(SearchAccount.Text.Trim()==""||UserExists(SearchAccount.Text))
{
SearchAccountMessage.Text = "That account already exists.Please select an different account name.";
e.Cancel = true;
}
else
{
TextBox userName = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("UserName");
userName.Text = SearchAccount.Text;
SearchAccountMessage.Text = "";
e.Cancel = false;
}
}
}
private bool UserExists(string text)
{
if (Membership.GetUser(text) != null) { return true; }
return false;
}
注意:我们需要添加命名空间 using System.Web.Security;的引用。
PS
①Membership
Membership是ASP.NET为我们提供的一套验证和存储用户凭证的框架。它可以帮助我们快速的开发用户登录、管理以及权限验证相关的模块。
一般来讲我们的网站要实现的与用户相关的最基本功能包括:注册,登录,修改用户资料和密码。Membership为我们提供了以下几个类来帮助我们完成这些功能。
membership类
membership属性:
membership方法:
事件:
②
Cancel 属性
获取或设置一个值,指示是否应取消向导中到下一步的导航。
命名空间: System.Web.UI.WebControls
程序集: System.Web(在 system.web.dll 中)
CurrentStepIndex 属性
获取当前显示在
Wizard
控件中的
WizardStep
对象的索引。
命名空间: System.Web.UI.WebControls
程序集: System.Web(在 system.web.dll 中)