2012-04-16 3 views
8

CustomValidator을 양식에 넣었습니다. 그 ControlToValidate 속성을 설정하지 않았습니다. 그 ServerValidate 이벤트에서 나는 다음과 같은 서면으로 작성했습니다 :CustomValidator ServerValidate 메서드가 실행되지 않습니다.

protected void CustomValidator1_ServerValidate(object source,  
               ServerValidateEventArgs args) 
{ 
    args.IsValid = false; 
} 

나는이 방법에 중단 점을 넣어하지만 그 시점에 오지 않을 것 같다. 그러나 다른 형식으로이 작업을 수행하면 매력처럼 작동합니다.

  1. 버튼과 CustomValidator 모두의 ValidationGroup 속성은 내가 버튼과 CustomValidator 모두에서이 속성을 삭제하려고 같은
  2. 가 여전히 작동하지 않습니다 있습니다.

형식이있는 것처럼 보입니다. 난 그냥 양식에 CustomValidator 넣고 그냥 그 ServerValidate 이벤트 메서드를 설정 이외의 모든 속성을 건드리지 마십시오.

편집 : Page.Validate를 통해 버튼을 클릭 처리기에서 유효성 검사를 강제로

<asp:CustomValidator ID="CustomValidator2" runat="server" 
     ErrorMessage="This is a test" 
    onservervalidate="CustomValidator1_ServerValidate" 
    ValidationGroup="PA"></asp:CustomValidator> 


<asp:Button ID="btnPensionersOK" runat="server" Text="OK" Width="75px" 
      onclick="Button1_Click" ValidationGroup="PA" /> 

답변

19

시도 :

protected void Button1_Click(Object sender, EventArgs e) 
{ 
    Page.Validate(); 
    if(Page.IsValid) 
    { 
     // servervalidate should have been called 
    } 
} 

편집 (코멘트)에서 :

다음은 영문 부분이다

컨트롤에 아무 것도 입력하거나 선택하지 않은 경우 유효성 검사기가 유효성을 검사하게하려면을 설정해야합니다을 true로 설정하십시오. RequiredFieldValidatorsCustomValidator으로 바꿀 수도 있습니다.

aspx의 validator-order는 이전 Validator가 이미 Page.IsValid=false을 만들었다면 customvalidator의 severvalidate가 호출되는지 여부를 결정한다고 가정합니다. 또는 ASP.NET은 매우 똑똑하기 때문에 SeverValidate이 간단한 text-is-empty 검사보다 비용이 많이들 것이라고 가정합니다.

+0

하지만 다른 검사기는 어떻게 작동합니까? 같은 폼에 RequiredFieldValidator가 여러 개 있지만 정상적으로 작동합니다. 그리고 다시, 나는 다른 형태로 똑같은 것을하고, 아무런 문제가 없다는 것을 확인합니다. ServerValidate 메서드는 실행되지 않습니다. –

+1

@MikeJM : 잘 모르겠습니다. 포스트 백에서 page_load에서 databinding합니까? 다른 곳에서'Page.Validate()'를 호출하고 있습니까? 자바 스크립트 오류가 발생합니까? RequiredFieldValidators가 포스트 백을 방지합니까? 다시 게시하고 있습니까? –

+0

예, 저는 Post_load에서 데이터 바인딩을하고 있지만 PostBack에서는 데이터 바인딩을하고 있지 않습니다. 다른 곳에서는 Page.validate()를 호출하지 않습니다. 자바 스크립트 오류가 발생하지 않습니다. RequiredFieldValidators는 다시 게시를 방지합니다. 게시 중입니다. –

0

또한 CustomValidators와 RequiredFieldValidators를 동시에 사용하는 사용자에게 도움을 드리고 싶습니다. 먼저 클라이언트 측 유효성 검사가 수행된다는 점을 고려해야합니다. 그리고 서버 측 유효성 검사는 PostBack 이후에만 발생합니다. 분명히 알겠지만 확실하지는 않습니다. 즉, 먼저 특정 클라이언트 측 작업 유효성 검사기에 바인딩 된 모든 컨트롤이 포스트 백이 발생하도록 유효해야합니다. 페이지 이후. IsValid는 서버 쪽 유효성 검사 메시지가 포함 된 모든 변경 사항을 게시하고 게시하는 True 서버 측 항목입니다.

그래서 여기 클라이언트 측에서 작동하도록 유효성 검사기의 두 그룹을 설정 동시에 :

  1. 에서 작업 한 검증에 내장 모두 CustomVCalidators 등을 만들 수있는 방법입니다. 이 경우 우리는 커스텀 계약자 (들)에 대해 클라이언트 쪽에서 유효성을 검사 할 스크립트를 배치해야합니다. 스크립트를 작성하지 않고 ServerValidate 메소드를 채우지 않고 유효성 검사를 서버에서 수행합니다. EnableClientScript 특성이 True로 설정된 경우에도 마찬가지입니다.

  2. 서버 쪽에서 작동하도록 두 그룹의 유효성 검사기를 설정하십시오. 그렇게하려면 EnableClientScript를 False로 설정하면됩니다. 그러나 이것은 서버를로드합니다.

관련 문제