2016-07-07 8 views
1

필자는 작성해야하는 매우 긴 양식이 있습니다. 사용자 입력을 기반으로 숨기기/표시하는 여러 컨트롤이 있으므로 maintainScrollPositionOnPostBack을 사용할 수 있습니다.Asp.net maintainScrollPositionOnPostBack 및 양식 유효성 검사 실패

양식이 길기 때문에 페이지에 초점을 맞추고 유효성 검사를 실패하게 만든 첫 번째 컨트롤로 스크롤하고 유효성 검사 실패 옵션에 초점을 맞 춥니 다. 그러나 maintainScrollPositionOnPostBack이이를 재정의하는 것처럼 보입니다 (컨트롤에는 포커스가 있지만 스크롤하지는 않습니다).

해결 방법에 대한 아이디어가 있으십니까? 지금까지 시도한 모든 것은 효과가 없습니다. 그것은 asp.net webforms 프로젝트입니다.

답변

0

이것은 좋은 질문이며 실제로 작동하는 것은 매우 까다 롭습니다. 그러나 나는 당신이 시도하고 어쩌면 위에 만들 수있는 하나의 버전을 얻을 수 있었다.

MaintainScrollPositionOnPostback = "true"로 설정하면 양식 제출 및 창로드시 일련의 javascript-events가 설정되며 유효성 검사기가 설정 한 포커스를 "덮어 씁니다". 우리는 또한 ASP를 하나를 떠날 필요가 있습니다 (

<asp:RequiredFieldValidator ID="RequiredFieldValidator1" runat="server" CssClass="error" ErrorMessage="RequiredFieldValidator" SetFocusOnError="true" 
    EnableClientScript="false" ControlToValidate="TextBox1"></asp:RequiredFieldValidator> 

을 그리고 나는 window.load 다른의 EventListener를 추가 :

그래서 제가 한 일은과 같이 모든 검증에 공통의 CSS 클래스를 추가했다. 당신이 jQuery를 혜택을 누릴 수

다음
<script> 
    window.addEventListener("load", function() { 
     var el = document.getElementsByClassName("error"); 
     if (el.length > 0) { 
      window.location.hash = "#" + el[0].id;     
     } 
    });   
</script> 

이 더 많은 브라우저를 지원할 수 있도록 사용하지만하여 addEventListener은 pretty well supported입니다 : 넷) ... 그래서 우리는 windows.load = 기능을 할 수 없어 추가했다.

스크립트는 errormessage를 검색하고 앵커가있는 ID를 통해 오류 메시지를 찾습니다. Javascript에는 focus-method이 있지만 양식 요소 용이므로이 해결 방법이 그 이유입니다.

희망이 도움이됩니다.

+0

답장을 보내 주셔서 감사합니다. 방금 시도했는데 유효성 검사에 실패한 컨트롤의 수를 인식합니다. 그러나 'window.location.hash = "#"+ el [0] .id; "는 아무 것도하지 않는 것 같습니다. 왜 이런지 모르겠습니다. 테스트 및 업데이트를 계속하겠습니다. – mtNewToJava

+0

로드 - 이벤트의 순서 일 수 있습니다.이 스크립트를 body-element의 맨 아래에 놓으십시오. – Esko

+0

예, 문제가 해결되었습니다. 스크립트를 페이지의 맨 마지막에 넣어야했습니다! 다른 가능한 해결책은 전체 포스트 백을 수행하는 대신 업데이트 패널을 사용하고 maintainScrollPositionOnPostBack = "false"로 설정하는 것입니다. 시간이 있다면 늦게 시도 할 수도 있습니다. 도와 주셔서 대단히 감사합니다. – mtNewToJava