2013-02-22 1 views
0

두 가지 조건에 대해 내장 유효성 검사기를 사용하여 입력 용 asp.net 텍스트 상자의 유효성을 검사하는 방법이 있습니까? 텍스트 상자는 날짜 선택 도구와 함께 사용되며, 현재 나는 검증하기 위해 다음과 같이 RegularExpressionValidator을 가지고 매번 잘못된 날짜를 입력 화재두 개의 개별 조건에 대한 클라이언트 측 유효성 검사

<asp:TextBox ID="tbStartDate" runat="server" Width="100" CssClass="TextCompact">yyyy</asp:TextBox> 
<asp:HyperLink ID="hlStartDate" runat="server" ImageUrl="~/Images/iconCalendar.gif"></asp:HyperLink><br /> 
<asp:RegularExpressionValidator ID="revStartDate" ControlToValidate="tbStartDate" 
    CssClass="TextCompact" runat="server" ErrorMessage="* Invalid Date" ValidationExpression="^(\d{4})$" /> 

이 - 당신이 날짜 선택기를 사용하거나 날짜를 입력 할 수 있습니다 끈.

그래서 문제는 텍스트 상자에 데이터가 있는지 확인하는 것입니다. 텍스트 상자가 비어 있으면 유효성 검사없이 통과 시키길 원합니다.

이것이 가능합니까 아니면 사용자 지정 클라이언트 측 유효성 검사가 필요합니까?

감사합니다. Risho.

업데이트 : 나는 BaseValidator 클래스에서 파생 된 내 자신의 유효성 검사기 클래스를 작성하기로 결정하고 그것을 유선하지만 컴파일러 오류가 발생했습니다

.

<%@ Register TagPrefix="Cv" Namespace="Abcdefg1234" TagName="CustomValidaitonX" %> 

과 실제 태그 :

Cv:Custom_Validator ID="cvtbStartDate" ControlToValidate="tbStartDate"      runat="server" ErrorMessage="* Invalid Date" /> 

내가 알 수없는 서버 태그를 얻을
namespace Abcdefg1234 
{ 
    public class Custom_Validator : BaseValidator 
    { 
     public Custom_Validator() 
     { 

     } 

     protected override bool EvaluateIsValid() 
     { 
      String value = this.GetControlValidationValue(this.ControlToValidate); 
      return ValidateControls(value.Trim()); 
     } 

     public static bool ValidateControls(string value) 
     { 

      if(Regex.IsMatch(value, @"^(\d{4})$") == true) 
       return true; 
      else if(value == "") 
       return true; 
      else 
       return false; 
     } 
    } 
} 

는 다음 나는 페이지 지시문 태그를 포함. 어떤 아이디어? 감사.

답변

0

빈 텍스트 상자에서 실행되는 기본 제공 유효성 검사기는 RequiredFieldValidator입니다. 텍스트 상자가 비어있는 경우, 그것과 연관된 다른 유효성 검사기는 양식 제출시 실행되지 않습니다.

즉, 텍스트 상자가 아직 비어있는 상태로 제출하면 RegularExpressionValidator이 실행되지 않고 그대로 잘되어야합니다. 다른 행동을하고 있습니까?

ETA : Custom_Validator을 인식하려면 등록 페이지 지시문에 어셈블리 이름을 지정해야합니다. 태그 이름이 맞춤 컨트롤에 필요하다고 생각하지 않습니다.

+0

답장을 보내 주셔서 감사합니다. 내가 말한대로 어셈블리 이름을 추가하려했지만, 내가 얻은 오류는 Counld가 assemply 의존성을로드하지 않는다는 것입니다. – Risho

+0

글쎄, 많은 것들이 그 예외를 일으킬 수 있습니다. 첫째, 어셈블리 이름은 파일 확장자없이 경로없이 지정해야합니다 : 단지'abcdefg1234' 또는 어셈블리 이름이 무엇이든간에. 그게 도움이 되니? –

+0

우리는 솔루션의 일부인 사이트에서 모든 클래스를 seprate 프로젝트로 유지합니다. 여기가 상주하는 곳이며 네임 스페이스의 이름은이 프로젝트의 이름을 따릅니다. 이상한 점은 .cs 파일에서 클래스가 인텔리전스에 의해 선택된다는 것입니다. App_Code 폴더로 클래스를 옮겨 보았지만 도움이되지 않았습니다. – Risho

관련 문제