使用ajax在Asp.Net中即时检查用户名可用性

时间:2012-01-17 19:02:12

标签: asp.net ajax username

我在EncosiaTravis这篇文章之后阅读了这篇文章。 和来自Mosa

的另一个很好的验证器

但是在链接和整个网络上的许多其他文章中我看到过,他们没有使用用户创建用户向导来检查用户名可用性。 但我想使用create user wizard验证它吗?

是否有可能将其转换为使用“创建用户向导”?如果是这样,我该怎么做?

实际上在Encosia的例子中,有一个代码块显示Username_changed:

protected void Username_Changed(object sender, EventArgs e)
{
  if (Membership.GetUser(Username.Text) != null)
    // Display a username taken message.
  else
    // Display a username available message.
}

那么对于这个如何根据用户向导进行更改?在创建用户向导中,没有针对个人文本框的特定更改事件?这里我有点困惑:(我得到了一个客户ID的澄清

我尝试使用javasript修改它

var UserName = '<%= ((TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("UserName")).ClientID %>'; 

但这不起作用。

1 个答案:

答案 0 :(得分:1)

来自MSDN

<asp:WizardStep>元素添加到<WizardSteps>控件的CreateUserWizard部分。在自定义CreateUserWizard控件将使用的其他向导步骤中包含任何控件和标记。

以下代码示例显示了在CreateUserStep控件的CreateUserWizard之前添加的步骤,其中包含用于输入用户名的文本框控件。将检查用户名以确保其在成员资格数据库中尚不存在

<asp:WizardStep ID="CreateUserWizardStep0" runat="server">
     <table border="0" style="font-size: 100%; font-family: Verdana" id="TABLE1" >
          <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" />                                          
              </td>
          </tr>
      </table>
 </asp:WizardStep>

为向导步骤添加代码。您可以处理Wizard控件的NextButtonClick事件来执行您的代码。 CurrentStepIndex属性值指示哪个附加向导步骤通过步骤索引号引发NextButtonClick事件(从第一步的0开始)。

以下代码示例显示NextButtonClick事件的处理程序,该事件采用在上一代码示例的向导步骤中的TextBox控件中输入的用户名,并验证用户名是否为空并且在成员资格数据库中当前不存在。您需要将OnNextButtonClick属性添加到页面上的CreateUserWizard控件,该控件引用NextButtonClick事件处理程序的处理程序(例如,OnNextButtonClick="CreateUserWizard1_NextButtonClick"。)

private bool UserExists(string username)
{
    if (Membership.GetUser(username) != null) { return true; }

    return false;
}

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;
        }
    }
}