ASP.Net 유효성 검사 요약으로 인해 페이지가 맨 위로 이동합니다.
몇 가지 필수 필드 검증자와 검증 요약 컨트롤이 포함된 간단한 양식이 있습니다.양식을 제출하면 클라이언트 유효성 검사를 통해 양식이 페이지 맨 위로 이동합니다.유효성 검사 요약을 제거하면 페이지가 이동하지 않습니다.
다음은 간단한 예입니다.
<asp:TextBox ID="test" runat="server"></asp:TextBox>
<asp:RequiredFieldValidator ID="testrequired" runat="server" ControlToValidate="test">*</asp:RequiredFieldValidator>
<asp:ValidationSummary ID="summary" runat="server" />
<asp:Button ID="submit" runat="server" Text="submit" />
설정해 봤습니다.SetFocusOnError="true"
필수 필드 검증자 및MaintainScrollPositionOnPostback="true"
비록 이것이 포스트백은 아니지만 아무 행운도 없이 낄낄거리기 위해.이 문제에 대해 알려진 해결책이 있습니까?
편집:
웹리소스에서 생성된 js에서 문제를 발견했습니다.axd. 한 줄로 내려오는 것 같습니다.ValidationSummaryOnSubmit()
기능.
line 534: window.scrollTo(0,0);
이것을 제거하거나 우회하는 방법에 대한 아이디어가 있습니까?
EDIT2:
당분간은 간단한 해결 방법:
- 세트
EnableClientScript="false"
모든 유효성 검사 컨트롤(클라이언트 유효성 검사 필요) - 세트
MaintainScrollPositionOnPostback="true"
페이지 지시어로
여전히 고객측의 해결책을 기대하는 중...
EDIT3:
더 나은 해결책은 단지 그것을 무시하는 것입니다.window.scrollTo()
유효성 검사 스크립트에 의해 호출될 때 아무것도 수행하지 않도록 기능합니다.
<script type="text/javascript">
window.scrollTo = function() { }
</script>
페이지의 아무 곳에나 위의 내용을 추가하면 클라이언트 유효성 검사는 그대로 유지되지만 사용할 수 없습니다.window.scrollTo()
페이지 전체에 걸친 방법
두 가지 해결 방법:
클라이언트 유효성 검사를 사용하지 않도록 설정하고 포스트백에서 올바른 위치로 이동합니다.
* set EnableClientScript="false" for all validation controls (disabling client validation)
* set MaintainScrollPositionOnPostback="true" in Page directive
Javascript에서 scrollTo 기능을 비활성화합니다.
<script type="text/javascript">
window.scrollTo = function() { }
</script>
이는 Microsoft Connect에 문서화된 것처럼 알려진 버그입니다.관련 문제는 다음과 같은 최상의 해결 방법에 대한 기초가 있습니다.
var ValidationSummaryOnSubmitOrig = ValidationSummaryOnSubmit;
var ValidationSummaryOnSubmit = function() {
var scrollToOrig = window.scrollTo;
window.scrollTo = function() { };
var retVal = ValidationSummaryOnSubmitOrig();
window.scrollTo = scrollToOrig;
return retVal;
}
대신에
<script type="text/javascript">
window.scrollTo = function() { return true; }
</script>
모든 포스트백에 대해 ScrollTo 기능을 무차별적으로 재정의할 수 있는 이 기능을 버튼의 OnClientClick 이벤트에 넣었습니다.아래와 같이.
onClientClick="window.scrollTo = function(x,y) { return true; };"
그것이 최선의 해결책인지는 모르겠지만, 그것이 저에게 효과가 있었던 것 같습니다.
cleek의 답변에 따르면, 이것은 해결책이 있는 알려진 버그입니다.
여기 bdukes 하나가 있는데, 제가 보기에는 현재 이용 가능한 것 중 가장 좋은 것 같습니다.
(function () {
var originalValidationSummaryOnSubmit = window.ValidationSummaryOnSubmit;
window.ValidationSummaryOnSubmit = function (validationGroup) {
var originalScrollTo = window.scrollTo;
window.scrollTo = function() { };
originalValidationSummaryOnSubmit(validationGroup);
window.scrollTo = originalScrollTo;
}
}());
(그는 여기 SO에 직접 게시하지 않았고, 현재 연결 문제는 확인하기 위해 등록이 필요한 것으로 보이며, 이로 인해 해결 방법에 액세스하기가 더 어려워졌습니다.)
사용: (jquery 및 jquery.scrollTo 필요)
먼저 유효성 검사 요약 위에 다음과 같은 특정 클래스의 앵커를 배치합니다.
<a class="custom_valsum_anchor" />
<asp:ValidationSummary ID="valSum" runat="server" EnableClientScript="true" />
그런 다음 Javascript의 다음 비트를 포함합니다.
$(document).ready(
function () {
var $valSum = $(".custom_valsum_anchor");
if ($valSum.size() > 0) {
var backup_ValidationSummaryOnSubmit = ValidationSummaryOnSubmit;
ValidationSummaryOnSubmit = function (validationGroup) {
var backup_ScrollTo = window.scrollTo;
window.scrollTo = function () { };
backup_ValidationSummaryOnSubmit(validationGroup);
window.scrollTo = backup_ScrollTo;
setTimeout(function () { $("body").scrollTo($valSum); }, 1);
};
}
}
);
할 때, 으로적필, 할때요대다니, 을합체그것은본것그기,▁bas다▁replaces,를 대체합니다.ValidationSummaryOnSubmit
을 일시적으로 비활성화하는 window.scrollTo
그리고 닻으로 스크롤합니다.jquery를 사용하지 않도록 수정하는 것은 어렵지 않을 것입니다.
사용 중인 문제가 발생했습니다.MaintainScrollPositionOnPostback=true
작동하지만 클라이언트 측 유효성 검사 스크롤 위치가 손상됩니다.그래서 포스트백에서 검증 요약 컨트롤을 표시하는 스크립트를 추가했습니다.
private void FocusControlOnPageLoad(Control ctrl)
{
this.Page.ClientScript.RegisterClientScriptBlock(
typeof(System.Web.UI.Page), "ctrlFocus",
@"<script>
function ScrollView()
{
var el = document.getElementById('" + ctrl.ClientID + @"')
if (el != null)
{
el.scrollIntoView();
el.focus();
}
}
window.onload = ScrollView;
</script>");
}
포함:
protected void Page_PreRender(object sender, EventArgs e)
{
if (Page.IsValid == false)
{
FocusControlOnPageLoad(TheValidationSummary);
}
}
ScrollTo 기능도 비워 두어야 할 것 같습니다.
window.scrollTo = function() {
return true;
}
(대부분) 여기서 코드를 얻었습니다.
페이지는 유효성 검사 요약이 있는 곳으로 이동합니다.아래쪽으로 유지하려면 제출 단추 근처로 유효성 검사 요약을 이동합니다.
EDIT. 유효성 검사 요약을 해제할 수도 있습니다.
필요한 필드 검증기에서 상속하고 사용자 지정 제어에서 클라이언트 측 검증을 재정의할 수 있습니까?
HTML의 대상 스키마를 설정합니다.
http://msdn.microsoft.com/en-us/library/6379d90d(VS.71).aspx 을 사용해 보십시오.
VS 2005 이전에는 페이지 단위로 스키마를 설정할 수 있었습니다.
생각일 뿐이야.
언급URL : https://stackoverflow.com/questions/699171/asp-net-validation-summary-causes-page-to-jump-to-top
'programing' 카테고리의 다른 글
지정된 UIColor에 대해 더 밝고 어두운 색상 변화를 표시합니다. (0) | 2023.08.18 |
---|---|
100% 너비 텍스트 상자가 컨테이너 밖으로 확장되는 것을 막을 수 있습니까? (0) | 2023.08.18 |
빠른 클릭 시 Chrome에서 요소가 파란색으로 강조되는 것을 방지하기 위한 방법은 무엇입니까? (0) | 2023.08.18 |
spring @AutoWired Map을 사용할 수 있습니까? (0) | 2023.08.18 |
Xcode 4에서 iOS 프로젝트에 정적 라이브러리 연결 (0) | 2023.08.13 |