2012-02-13 5 views
1

두 개의 유효성 검사 컨트롤이 있는데, 하나로 합칠 수 있습니까? 다음은 원래 두 개의 컨트롤이지만 첫 번째 컨트롤에서만 작동합니다. 나는 하나의 유효성 검사 컨트롤 만 가질 수 있다는 것을 깨달았다.두 개의 유효성 검사 컨트롤을 하나로 결합하십시오.

<asp:TextBox runat="server" ID="UserName" /> 
          <asp:RegularExpressionValidator ID="RegularExpressionValidator1" ValidationExpression="^[a-zA-Z0-9]{6,}$" 
           runat="server" ErrorMessage="Error, please reselect it" ControlToValidate="UserName"> 
           </asp:RegularExpressionValidator> 
           <asp:CustomValidator 
            ID="CustomValidator1" runat="server" 
           ErrorMessage="Please select another name." ControlToValidate="UserName" OnServerValidate="ValidateUser"></asp:CustomValidator> 

그리고 뒤에 코드의 검증 :

protected void ValidateUser(object source, ServerValidateEventArgs args) 
    { 
     // check if the username created exists in AD already. 
     TextBox UserNameTextBox = 
     (TextBox)CreateUserWizardStep2.ContentTemplateContainer.FindControl("UserName"); 
     string UserNameCreated = UserNameTextBox.Text; 
     DirectoryEntry entry = new DirectoryEntry("LDAP://cfs"); 
     entry.AuthenticationType = AuthenticationTypes.Secure; 

     DirectorySearcher deSearch = new DirectorySearcher(entry); 
     deSearch.Filter = "(&(objectClass=user)(cn=" + UserNameCreated + "))"; 

     SearchResultCollection results = deSearch.FindAll(); 
     Match match = Regex.Match(args.Value, @"^[a-zA-Z0-9]{6,}$", 
    RegexOptions.IgnoreCase); 

     if (results.Count > 0) 
      args.IsValid = false; 
     else if (match.Success) 
      args.IsValid = true; 
     else 
      args.IsValid = false; 
    } 

감사합니다. 편집 : 앱이 중단 점을 설정하더라도 여기에 연결할 수 없습니다. 첫 번째 유효성 검사 컨트롤을 제거하고 두 번째 유효성 검사 만 유지합니다.

+2

사랑에는 통제가 없지만 무엇이든 하나를 결합 할 수 있습니다 :-) – zod

답변

1

시험해보기 : 위와 같이 모든 작업을 사용자 지정 유효성 검사기에 지정하고 정규식 검사기를 지정하십시오.

ASPX 코드 :

<asp:TextBox runat="server" ID="UserName" />        
<asp:CustomValidator ID="CustomValidator1" runat="server" 
ControlToValidate="UserName" OnServerValidate="ValidateUser"></asp:CustomValidator> 

ASPX.CS 코드 (코드 숨김)

protected void ValidateUser(object source, ServerValidateEventArgs args) 
     { 
      Regex regx = new Regex("^[a-zA-Z0-9]{6,}$"); 
      if (regx.IsMatch(UserName.Text) == false) 
      { 
       CustomValidator1.ErrorMessage = "Error, please reselect it"; 
       args.IsValid = false; 
      } 
      else 
      { 
       // check if the username created exists in AD already. 
       TextBox UserNameTextBox = 
       (TextBox)CreateUserWizardStep2.ContentTemplateContainer.FindControl("UserName"); 
       string UserNameCreated = UserNameTextBox.Text; 
       DirectoryEntry entry = new DirectoryEntry("LDAP://cfs"); 
       entry.AuthenticationType = AuthenticationTypes.Secure; 

       DirectorySearcher deSearch = new DirectorySearcher(entry); 
       deSearch.Filter = "(&(objectClass=user)(cn=" + UserNameCreated + "))"; 

       SearchResultCollection results = deSearch.FindAll(); 
       if (results.Count > 0) 
       { 
        CustomValidator1.ErrorMessage = "Please select another name."; 
        args.IsValid = false; 
       } 
       else 
       { 
        args.IsValid = true; 
       } 
      } 
     } 
하나 개의 항목으로 모든 작업을 수행하려는 경우 이것은 단지 하나의 방법입니다

이것은 내가 생각할 수있는 빠른 것입니다. 어떻게 가는지, 그리고 어떻게 생각하는지 알려주세요.

+0

위대한 코드. 또 다른 질문 인 CustomValidator는 절대로 실행되지 않습니다. –

+1

새 코드를 게시 할 수 있습니까? 위의 내용을 테스트했기 때문입니다. –

관련 문제