2011-01-28 2 views
2

국가 (드롭 다운), 주소 (텍스트 상자), 도시 (텍스트 상자), 주 (드롭 다운) 및 Zip (텍스트 상자). "미국"이 드롭 다운 목록에서 선택되면 City, State 및 Zip의 유효성 만 검사하려고합니다. "유효성 검사"란 길이를 확인한다는 의미입니다."미국"이 국가로 선택된 경우 도시, 주 및 우편 번호 만 확인하십시오.

사용자 정의 유효성 검사기를 사용해 보았지만 겉으로보기에는 작동해야하는 코드가 아무 것도하지 않기 때문에 뭔가 빠졌습니다. 예 :

function validateLocation(sender, args) { 
    var country = jQuery("#main_2_MailingAddress_Country").val(); 
    var city = jQuery("#main_2_MailingAddress_City").val(); 
    if (city.Length() > 0) 
    { 
     args.IsValid = true; 
    } 
    else 
    { 
     args.IsValid = country != "United States"; 
    } 
} 

서버 측 유효성 검사 : 그럼 여기

<asp:CustomValidator ErrorMessage="City, State, and Zip are required fields" 
Display="None" ID="LocationValidator" 
runat="server" ClientValidationFunction="validateLocation" 
onservervalidate="LocationValidator_ServerValidate"> 
</asp:CustomValidator> 

내 유효성 검사 코드

클라이언트 측 유효성 검사 인 나는 경우

protected void LocationValidator_ServerValidate(object source, ServerValidateEventArgs args) 
    { 
     if (City.Text.Length > 0) 
     { 
      args.IsValid = true; 
     } 
     else //nothing was entered for "City" 
     { 
      args.IsValid = Country.SelectedValue != "United States"; 
     } 
     //similar functions for State and Zip go here 
    } 

만 do-server-si 유효성 검사 및 폼에 아무것도 채우지 않습니다 (주소 필드 외에도 다른 필수 필드가 있음). 그런 다음 다른 필드에 대한 RequiredFieldValidators가 실행됩니다. 그러나 City, State 및 Zip (미국을 선택한 경우)을 제외한 모든 입력란을 채우면 양식은 비어있는 것을 포착하지 않고 제출됩니다.

위의 예와 같이 사용자 정의 유효성 검사기에 대해 클라이언트 측 유효성 검사기와 서버 측 유효성 검사를 모두 지정하면 유효성 검사기가 실행되지 않고 양식이 제출됩니다.

나는 이것이 길고 혼란스러운 게시물 일 수 있다는 것을 알고 있지만, 내가 잘못 가고있는 것에 대한 아이디어가 있습니까?

+1

포스트 백에서 Page.Validate()를 사용하여 페이지 유효성 검사를 강제로 수행 할 수 있습니다. –

답변

2

그것은 그들이 예에서 아니에요으로 RequiredFieldValidators와 잘못 무슨 말을하기 어렵다 (? 당신은 유효성을 검사하는 제어를 지정 않았다)하지만, 여기에 희망이 당신에게 도움이 될 것입니다 예입니다 :

protected void LocationValidator_ServerValidate(object source, ServerValidateEventArgs args) 
     { 
      args.IsValid = IsCountryValid(); 
     } 

     private bool IsCountryValid() 
     { 
      if (Country.SelectedValue == "US") 
      { 
       if (String.IsNullOrEmpty(City.Text)) 
        return false; 

       if (String.IsNullOrEmpty(State.SelectedValue)) 
        return false; 

       if (String.IsNullOrEmpty(Zip.Text)) 
        return false; 
      } 
      else if (String.IsNullOrEmpty(Country.SelectedValue)) 
      { 
       return false; 
      } 

      return true; 
     } 

나는 메일을 볼 수 있습니다하기 위해 '동적'으로 표시를 변경 :

<asp:CustomValidator ID="LocationValidator" runat="server" 
      ErrorMessage="City, State, and Zip are required fields" Display="Dynamic" 
      OnServerValidate="LocationValidator_ServerValidate"></asp:CustomValidator> 

드롭 다운 대신 빈 문자열의 값을 가질 경우, 분명히 사람들을 위해 검증을 변경,하지만 난이 도움이되기를 바랍니다!

+0

정말 멋지다. 다른 열쇠는 customvalidator에 검증 그룹을 추가하는 것이 었습니다. 그런 다음 Page_Load 내부에서 Page.Validate ("유효성 검사 그룹") 및 if (! IsValid)를 수행하여이 사용자 정의 컨트롤을 호출했습니다. 당신이 논리를 가지고 나를 도왔으므로 대답을 드리겠습니다 - 감사합니다! – esvendsen

+0

기꺼이 도와 드리겠습니다! 그리고 고마워, 이것이 나의 처음으로 받아 들여진 대답이었다. :) – annelie

관련 문제