2014-01-28 5 views
1

우리는 고객의 웹 사이트에 등록 할 수있는 많은 고객이 사용하는 양식을 가지고 있습니다. 양식의 소유자가 양식에 표시되거나 숨겨 지도록 필드를 설정할 수 있으며 또한 필수 항목이기 때문에 사용자 정의 할 수 있습니다. 그러나 표시되는 일부 필드의 경우 양식이 유효하도록 다른 필드를 설정해야합니다. 따라서 유효성 검사는 까다로울 수 있습니다. 다른 까다로운 부분은 모든 오류 메시지가 유효성 검사 요약에 함께 표시되기를 바랍니다. 만약 내가 linkbutton에 대한 onclientclick이라는 자체 함수를 가지고 있다면, 에러 메시지를 검증 요약에 추가 할 수 없다.클라이언트 측 유효성 검사를위한 customvalidator가 작동하지 않습니다.

우리가 원래 발견 한 솔루션은 controltovalidate 속성을 설정하지 않고 페이지에서 사용자 정의 유효성 검사기를 만드는 것이었지만 우리가 호출하길 원하는 함수에 clientvalidationfunction을 설정해 두었습니다. 이로써 우리는 발신자 인수의 오류 메시지를 설정하여 유효성 확인서에 나타나게되었습니다.

추가 검증 로직을 추가해야하는데,이 작업을 수행 할 때 페이지가 더 이상 작동하지 않는다는 것을 깨달았습니다. (이제는 .net 2에서 작동하고 있다고 생각합니다. 이제는 .net 4입니다.)

다음은 기본 html 코드입니다.

웹 페이지 -

<asp:ValidationSummary ID="vsummary" runat="server" HeaderText="Oops, it appears the following required fields are not completed." CssClass="error" /> 
<asp:CustomValidator ID="cstCustomScripts" runat="server" ClientValidationFunction="ValidateExtraFields" /> 
...additional form fields here 
<asp:LinkButton ID="btnAddUpdate" runat="server" onclick="SubmitProfile" /> 

그리고 사용자 정의 유효성 검사기에 의해 호출되는 자바 스크립트 ... 과거

function ValidateExtraFields(sender, args) { 
    args.IsValid = true; 

    if (typeof window.RelocationSelectionRequired == 'function') { 
     if (!RelocationSelectionRequired()){ 
      args.IsValid = false; 
      sender.errormessage = "If you are open to relocating, please select the state(s) and cities."; 
      return; 
     } 
    } 

    if (typeof window.ValidateHomeState == 'function') { 
     if (!ValidateHomeState()) { 
      args.IsValid = false; 
      sender.errormessage = "Home state is required."; 
      return; 
     } 
    } 

    if (typeof window.ValidateWorkState == 'function') { 
     if (!ValidateWorkState()) { 
      args.IsValid = false; 
      sender.errormessage = "Work state is required."; 
      return; 
     } 
    } 

    var invalidNumberField = ""; 
    $("[data-validate-function='GreaterThanZero']").each(function() { 
     var t = $(this); 
     if (t.val().trim() == "0") { 
      args.IsValid = false; 
      invalidNumberField = t.attr("controlName"); 
      return false; 
     } 
    }); 

    if (invalidNumberField.length > 0) { 
     sender.errormessage = invalidNumberField + " cannot be zero."; 
     return; 
    } 
} 

함수가 성공적으로의 ValidationSummary이 함수에서 메시지를 추가 할 것 양식을 제출하지 않고 통제하십시오. 이제 메시지는 계속 추가되지만 양식을 제출하지 않아도됩니다. 누구든지 이것이 .net 2에서 .net 4로 이동 한 결과인지 알 수 있습니까? 아니면 더 이상 효과가없는 다른 이유가 있습니까? 감사.

답변

0

유효성 확인을 위해 링크 버튼에 CauseValidation = true이 있어야합니다.

+0

이전에는 절대로 필요하지 않았습니다. 페이지에 다른 필수 입력란 중 하나를 비워두면 유효성 검사가 제대로 작동합니다. 양식이 제출되지 않습니다. 킥을 위해서 나는 그것을 시도했지만 아직도 폼을 제출하고 있습니다. –

0

당신은 당신이 이것이 .net 2.0에서 작동한다는 것을 말했습니다. Breaking changes in ASP.NET 4에 대한 페이지를 찾았습니다. CustomValidator 컨트롤에 대한 구체적인 내용은 크게 달라지지 않습니다. 하지만 try를 사용할 수있는 web.config의 설정에 대해 설명합니다. Rendering Compatibility Version을 2.0 또는 3.5로 낮 춥니 다.

<pages controlRenderingCompatibilityVersion="2.0" /> 

또는

<pages controlRenderingCompatibilityVersion="3.5" /> 

그건 당신이 또한 2.0 또는 3.5 웹 프로젝트의 .NET 버전을 낮추기 위해 시도 할 수 있습니다 작동하지 않는 경우

.

+0

감사합니다. 나는 3.5 태그를 시도했지만 아무런 변화가 없었다. 2.0으로 설정하면 컨트롤 렌더링 호환성 버전이 3.5보다 작아서는 안된다는 오류가 발생합니다. 불행히도 너무 많은 코드는 .net4를 기반으로합니다. 바라건대 또 다른 해결책이 있습니다. –

+0

소스 제어하에 코드를 가지고 있다면 시도해 볼 수있는 한 가지는 내가하는 일이다. 그런 다음 팀 탐색기에서 "특정 버전 가져 오기"를 수행하여 .net 2.0이었을 때 버전으로 기록으로 돌아가보십시오. 그렇다면 4.0 버전으로 업그레이드했기 때문에 작업 범위를 좁힐 수 있습니다. –

+0

감사하지만 시스템이 너무 커서 한 가지 형식의 유효성 검사를 위해 롤백 할 수 없습니다. 나는 기본적으로 지금 막 그것의 큰 부분을 다시 쓰는 것을 끝냈다 그래서 지금 일하고있다.다시 한번 감사드립니다. –

관련 문제