Мгновенная проверка доступности имени пользователя в Asp.Net с помощью ajax - PullRequest
1 голос
/ 17 января 2012

Я прошел через эту статью Encosia и эту статью Трэвис и еще один замечательный валидатор из Моза

Но здесь, вссылку и во многих других статьях по всему Интернету, которые я видел, и они не использовали мастер создания пользователя для проверки доступности имени пользователя.Но я хочу проверить его с помощью мастера создания пользователей?

Есть ли возможность преобразовать это, чтобы получить работу с мастером создания пользователей? Если да, то как я могу это сделать?

Собственно в примере Encosiaесть кодовый блок, который показывает для Имя_пользователя:

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

Итак, как это изменить в соответствии с мастером пользователя? Как в мастере создания пользователя нет конкретного события изменения для отдельных текстовых полей? Здесь янемного запутался :( и я получил одно разъяснение с идентификатором клиента

, и я попытался изменить его, используя javasript, как

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

, но это не работает.

1 Ответ

1 голос
/ 17 января 2012

С MSDN

Добавьте элемент <asp:WizardStep> в секцию <WizardSteps> элемента управления CreateUserWizard.Включите все дополнительные элементы управления и разметку в дополнительный шаг мастера, который будет использовать настраиваемый элемент управления CreateUserWizard.

В следующем примере кода показан шаг, который необходимо добавить перед элементом CreateUserStep элемента управления CreateUserWizard, включающим элемент управления textbox.для пользователей, чтобы ввести имя пользователя.Имя пользователя будет проверено, чтобы убедиться, что оно еще не существует в базе данных членства.

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

Добавьте код для шага мастера.Вы можете обработать событие NextButtonClick элемента управления Wizard, чтобы выполнить ваш код.Значение свойства 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;
        }
    }
}
...