2012-07-31 2 views
0

다음은 거래입니다. 텍스트 상자에 입력이있는 경우에만 발생시키는 사용자 지정 유효성 검사기를 작성했습니다. 발생하면 상자의 텍스트가 정수인지 확인하고 그렇지 않으면 거부합니다. 그것은 발사하지 않을 것이다. 그리고 나는 이유를 이해하려고 노력하고있다.ASP.NET 사용자 지정 검사기가 실행되지 않음

나는 부분 C# 클래스의 몸이 무효을 넣어 다음과 같이 검증을위한

protected void intValidate_Validate(object sender, ServerValidateEventArgs arg) 
    { 
     int num; 
     bool isNum = int.TryParse(arg.ToString(), out num); 

     if(arg.Value.Length>0){ 
      if (isNum) 
      { 
       arg.IsValid = true; 
      } 
      else 
      { 
       arg.IsValid = false; 
      } 
     } 
     else{ 
      arg.IsValid=true; 
     } 
    } 

코드는 다음과 같습니다

<div class="adult"> 
      <label>Adults ($10)</label> 
      <asp:TextBox runat="server" ID="wAdultLunch" class="adultLunch" MaxLength="2" /> 
      <asp:CustomValidator ID="intValidate" ControlToValidate="wAdultLunch" ErrorMessage="Invalid number" OnServerValidate="intValidate_Validate" Display="Static" runat="server" EnableClientScript="False" ValidateEmptyText="True"></asp:CustomValidator> 
</div> 
이 이

이 통찰력이

을 주시면 감사하겠습니다!

편집 : 나는

<asp:Button ID="wSubmit" runat="server" Text="Submit" OnClientClick="return validateForm();" causesvalidation="true"/> 
+0

포스트 백을 일으키는 개체에 마크 업을 포함시킬 수 있습니까? 해당 개체에 CausesValidation = 'false'를 사용하고 있습니까? 또한 진행하기 전에 포스트 백 처리기에서 IsValid를 확인합니까? –

+0

버튼에 대한 포스트 백 코드를 추가했습니다. 포스트 백 핸들러 내에서 IsValid를 확인하는 방법은 무엇입니까? – ijb109

+0

당신의 질문에 직접 답하지는 않지만''와''를 사용 해본 적이 있습니까? – freefaller

답변

2

잘못된 것을 구문 분석하고 있습니다. 당신이 실제로 (문자열이 이미 임) arg.Value로 할 때 arg.ToString() 그래서, 대신

... 당신에

bool isNum = int.TryParse(arg.ToString(), out num); 

변경을합니다 (.Value주의) "System.Web.UI.WebControls.ServerValidateEventArgs"의 문자열을 줄 것이다. ..

bool isNum = int.TryParse(arg.Value, out num); 

실제로 실제로 필요한 것보다 훨씬 복잡하지만. 모든 것은 TryParse 그렇지 않으면 변환이 성공하면 진정한를 반환하고, 거짓 때문이다

protected void intValidate_Validate(object sender, ServerValidateEventArgs arg) 
{ 
    int num; 
    arg.IsValid = int.TryParse(are.Value, out num); 
} 

... 같이 더 포괄적으로 많이 다시 작성할 수 있습니다.

그리고 마지막으로 생각하면이 모든 것은 유효성 검사기 컨트롤 인 <asp:RequiredFieldValidator ...>, <asp:CompareValidator Operator="DataTypeCheck" Type="Integer" ...><asp:RangeValidator ...>을 사용하여 달성 할 수 있습니다.


UPDATE

영업 이익이 지적 하듯이, 그는 텍스트 상자가 비어있을 때 때 오류를 원하므로 대신을 시도하지 않습니다 ...

protected void intValidate_Validate(object sender, ServerValidateEventArgs arg) 
{ 
    if (args.Value.Length > 0) 
    { 
     int num; 
     arg.IsValid = int.TryParse(are.Value, out num); 
    } 
    else 
    { 
     arg.IsValid = true; 
    } 
} 

그리고있다 @HansKesting에 의해 이미 지적되었습니다 ... 이것은 모든 클라이언트 측 유효성 검사가 통과 될 때만 호출됩니다. 클라이언트 측 유효성 검사가 실패하면 서버에 양식을 다시 제출하는 작업도 취소됩니다.

+0

도움이됩니다. 인수 길이를 얻으려고하는 이유 중 일부는 전달 된 값이없는 경우 유효하도록하려는 것이지만 인수가 있으면 숫자 여야합니다. – ijb109

+0

아, ok @ ijb109 - 그럴 경우 ... 구문 분석 **을 ** if (args.Value.Length> 0) 안에 넣습니다. 빈 문자열에서 아무런 결과가 없습니다. – freefaller

+0

, 제출 버튼을 클릭했을 때만 활성화됩니다. 이 경우 클라이언트 측 유효성 검사가 유효성 검사를하지 않으므로 테스트하려면 테스트를 중단해야합니다. – ijb109

0

아래 게시 코드를 부착 난 당신이 유효성 검사를 통과하면 실행하는 서버 측 이벤트가 있다고 가정합니다. 예 : 버튼 클릭 이벤트에 대한 Page.IsValid를 확인하면 유효성 검사가 통과하면 false가되고 Page.IsValid가 true가됩니다. Page.IsValid를 사용하여 유효성 검사가 통과했는지 여부를 확인해야합니다.

0

프런트 엔드에서 아래와 같이 CausesValidation 특성을 true로 설정해보십시오. 도움이되는지 확인하십시오.

<asp:Button ID="btnSubmit" Text="Submit" CausesValidation="true" runat="server" /> 
2

관련이 있는지는 잘 모르겠지만 사용자 지정 검사기가 실행되지 않는 문제가 있습니다. 나는 그것이 빈 문자열의 기본값을 가지고 dropdownlist를 확인했다. 나는 설정해야했다

ValidateEmptyString="true" 

그리고 나서 그것은 잘 작동하기 시작했다.

Validate() 함수를 호출하고 사용자 지정 유효성 검사기 컨트롤에서 IsValid 속성을 읽을 수도 있습니다. 그러나 페이지의 유효성 검사 기능은 정상적으로 작동하므로 이러한 호출이 필요하지 않습니다.

관련 문제