이것은 좋은 질문이며 실제로 작동하는 것은 매우 까다 롭습니다. 그러나 나는 당신이 시도하고 어쩌면 위에 만들 수있는 하나의 버전을 얻을 수 있었다.
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이 있지만 양식 요소 용이므로이 해결 방법이 그 이유입니다.
희망이 도움이됩니다.
답장을 보내 주셔서 감사합니다. 방금 시도했는데 유효성 검사에 실패한 컨트롤의 수를 인식합니다. 그러나 'window.location.hash = "#"+ el [0] .id; "는 아무 것도하지 않는 것 같습니다. 왜 이런지 모르겠습니다. 테스트 및 업데이트를 계속하겠습니다. – mtNewToJava
로드 - 이벤트의 순서 일 수 있습니다.이 스크립트를 body-element의 맨 아래에 놓으십시오. – Esko
예, 문제가 해결되었습니다. 스크립트를 페이지의 맨 마지막에 넣어야했습니다! 다른 가능한 해결책은 전체 포스트 백을 수행하는 대신 업데이트 패널을 사용하고 maintainScrollPositionOnPostBack = "false"로 설정하는 것입니다. 시간이 있다면 늦게 시도 할 수도 있습니다. 도와 주셔서 대단히 감사합니다. – mtNewToJava