ASP.NET AJAX의 예약된 함수 pageLoad 내에서 페이지가 포스트백되는지 확인하는 방법

StackOverflow https://stackoverflow.com/questions/40912

문제

내부를 확인할 방법을 찾고 있어요 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;
    }
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top