ASP.NET AJAX의 예약된 함수 pageLoad 내에서 페이지가 포스트백되는지 확인하는 방법
-
09-06-2019 - |
문제
내부를 확인할 방법을 찾고 있어요 pageLoad()
포스트백/비동기 포스트백 또는 로드 및 처음 액세스로 인해 로드 이벤트 중에 이 메서드가 발생하는 경우.
이는 다음과 유사합니다. Page.IsPostback
코드 숨김 페이지 내의 속성입니다.
티아, 리키
해결책
이를 수행할 수 있는 한 가지 방법은 Application.Init에서 Application.Load 핸들러를 연결한 다음 실행 후 해당 핸들러가 바인딩을 해제하도록 하는 것입니다.
Sys.Application.add_init(AppInit);
function AppInit() {
Sys.Application.add_load(RunOnce);
}
function RunOnce() {
// This will only happen once per GET request to the page.
Sys.Application.remove_load(RunOnce);
}
이는 Application.Init 후에 실행됩니다.pageLoad가 호출되기 전 마지막 항목이어야 합니다.
다른 팁
@대런:답변 해주셔서 감사합니다.이벤트 인수를 사용하여 pageLoad를 생성하려고 했습니다. ApplicationLoadEventArgs 매개변수로(아래 참조)그러나 따르면 이것:
비동기 포스트백을 포함하여 서버에 대한 모든 포스트백에 대해 로드 이벤트가 발생합니다.
명시한 대로 isPartialLoad 속성은 모든 포스트백 시나리오를 다루지는 않습니다.이벤트 인수에 isPostback 속성도 포함되어 있으면 좋을 것입니다.
function pageLoad(sender, arg) {
if (!arg.get_isPartialLoad()) {
//code to be executed only on the first load
}
}
@mmattax:클라이언트측(javascript)에서 호출할 수 있는 속성을 찾고 있습니다.
당신이 할 수 있는 일은 로드 이벤트에 연결하는 것입니다. 시스템 애플리케이션 수업.그런 다음 isPartialLoad 속성을 사용할 수 있습니다. Sys.ApplicationLoadEventArgs 수업.나는 이것이 비동기 포스트백에 있는지 여부를 알려줄 것이라고 믿습니다.
포스트백에 있는지 확인하려면 서버 측 코드에서 이를 처리하고 클라이언트에 내보내야 합니다.
포스트백/콜백인 경우 서버 측에서 알려진 값으로 설정한 숨겨진 입력이 있을 수 있으며 자바스크립트가 해당 값을 확인할 수 있습니다.
즉, 이에 대한 클라이언트 전용 솔루션이 있기를 바랍니다.
편집하다: @mmattax - 나는 그가 클라이언트 측 솔루션, 즉 JavaScript와 동등한 솔루션을 찾고 있다고 믿습니다.
비동기 호출 중에도 Page.IsPostback을 사용할 수 있습니다.
애플리케이션.초기화 첫 번째 로드 시에만 코드를 실행하려는 경우 사용하기에 더 적절한 이벤트일 수 있습니다.
@데이브 워드:이것은 일반적으로 작동합니다.그러나 코드는 동작 개체에 이벤트를 첨부하는 것입니다.동작 개체 생성은 Application.Init 중에 발생하므로 해당 이벤트에 연결하면 예측할 수 없는 동작이 발생합니다.
PostInit 이벤트가 있으면 좋을 것 같습니다.
@데이브 워드:RunOnce 메서드를 사용하면 완벽하게 작동합니다.이렇게 하면 이벤트에 연결하기 전에 처리기가 이미 존재하는지 먼저 확인하는 해결 방법 없이 문제가 해결됩니다.
귀하의 답변을 승인된 답변으로 표시하겠습니다.다시 한 번 감사드립니다.
다음은 우리가 한동안 사용해온 isPostback과 동등한 Ajax입니다.
public static bool isAjaxRequest(System.Web.HttpRequest request)
{//Checks to see if the request is an Ajax request
if (request.ServerVariables["HTTP_X_MICROSOFTAJAX"] != null ||
request.Form["__CALLBACKID"] != null)
return true;
else
return false;
}