AJAX 기술이 주장하는 새로 고침 없는 콜백을 사용하려면 대량의 JavaScript 코드를 작성하거나 원래 기술에서 일부 AJAX 프레임워크를 사용해야 하므로 개발 효율성과 유지 관리성이 크게 떨어집니다. 실제로 ASP.NET2.0은 이미 ICallbackEventHandler라는 인터페이스를 제공합니다.
이미 인터넷에는 ICallbackEventHandler에 대한 많은 기사가 있으며 이 기사는 실제로 이야기에 더 많은 것을 추가합니다.
ICallbackEventHandler는 System.Web.UI에 존재하며 매우 간단한 예를 통해 시도해 보겠습니다.
첫 번째 단계는 VS2005에서 새 웹 창을 만드는 것입니다.
두 번째 단계는 ASPX에 HTML 코드(아래)를 추가하는 것입니다.
1<본문>
2
세 번째 단계는
에 JavaScript 스크립트를 넣는 것입니다.
1 <스크립트 유형="텍스트/자바스크립트">
2 함수 CallServer()
3 {
4 var 제품 = "테스트";
5 <%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
6}
7
8 함수ReceiveServerData(rValue)
9 {
10 경고(r값);
11 }
12 스크립트>
네 번째 단계는 ASPX의 백그라운드 CS 코드에서 ICallbackEventHandler 인터페이스를 상속하고 인터페이스에 두 가지 메서드를 구현하는 것입니다.
ICallbackEventHandler.GetCallbackResult()
그리고
ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
다섯 번째 단계는 CallBackValue 변수를 추가하고 인터페이스의 두 가지 메서드를 다음과 같이 수정하는 것입니다.
1개의 개인 문자열 CallBackValue = string.Empty;
2
3 문자열 ICallbackEventHandler.GetCallbackResult()
4 {
5 CallBackValue + ",ok"를 반환합니다.
6}
7
8 void ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)
9 {
10 this.CallBackValue = eventArgument;
11 }
12
여섯 번째 단계는 실행하는 것입니다. 클릭하면 "Test"라는 문자열이 백그라운드로 전송됩니다. 백그라운드 C# 코드는 문자열에 ", OK"를 추가하고 이를 클라이언트의 JavaScript에 반환합니다. 코드를 작성하고 표시합니다.
위의 6단계를 수행하면 새로 고침 없는 콜백을 얻을 수 있습니다. 이제 몇 가지 코드를 분석해 보겠습니다.
먼저 세 번째 단계의 JavaScript 코드를 살펴보겠습니다. CallServer() 메서드에는 콜백 문이 있습니다.
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
4개의 매개변수 중 두 번째 매개변수는 제품 자바스크립트의 문자열 변수가 백그라운드로 반환되도록 지정하고, 세 번째 매개변수는 백그라운드에서 반환 시 반환 정보를 받는 자바스크립트 메소드인 ReceiverServerData(string Value)를 지정합니다.
다섯 번째 단계에는 백그라운드에 두 가지 메소드가 있습니다. 하나는 ICallbackEventHandler.RaiseCallbackEvent(string eventArgument)이며, 포그라운드 JavaScript에서 전달된 문자열 변수를 수신하여 이를 내부 변수 this.CallBackValue에 할당하는 데 사용됩니다. ICallbackEventHandler.GetCallbackResult()는 내부 변수 this.CallBackValue를 변경하고 전경 JavaScript 메서드인 ReceiverServerData(문자열 값)로 반환됩니다.
호출 순서는 다음과 같습니다: (프런트엔드)CallServer() --> (백엔드)ICallbackEventHandler.RaiseCallbackEvent(string eventArgument) --> (백엔드)ICallbackEventHandler.GetCallbackResult() --> (프런트엔드)ReceiveServerData(문자열 값).
전체 호출 프로세스는 매우 간단하며 가장 중요한 단계는 세 번째 단계입니다.
<%= ClientScript.GetCallbackEventReference(this, "product", "ReceiveServerData",null)%>;
이 방법에 대해서는 다음과 같은 정보가 인터넷에서 검색되어 있으니 한번 살펴보시면 됩니다.
GetCallbackEventReference는 클라이언트 요청이 끝날 때 클라이언트 메서드가 재활용되도록 합니다. 또한 CallBackManager가 생성할 콜백 메서드를 결정할 수도 있습니다. 이 예제에 사용된 오버로드된 메서드는 다음과 같습니다.
public string GetCallbackEventReference(
문자열 대상, 문자열 인수,
문자열 clientCallback, 문자열 컨텍스트,
문자열 clientErrorCallback)
표 1. GetCallBackEventReference 메소드에 대한 매개변수 설명.
매개변수 설명 콜백 호출이 처리되는 페이지의 대상 ID입니다. 자세한 내용은 바로 다음 섹션에서 사용할 수 있는 다른 오버로드된 옵션을 참조하세요. 샘플에서는 콜백이 동일한 페이지에서 처리되므로 "this"가 인수 값입니다. 서버에 값을 보내는 데 사용되는 매개변수 정의입니다. 이 값은 서버 측에서 raiseCallbackEvent 이벤트를 사용하여 "eventArgument" 매개변수로 수신됩니다. "arg"는 샘플에서 이 인수를 통해 전달됩니다. 클라이언트.clientCallback 성공적인 서버 호출 후 호출되는 콜백의 메소드 이름입니다. "CallBackHandler"는 콜백을 처리하는 메소드 이름입니다. 일반적으로 클라이언트의 "인수"와 연관된 매개변수입니다. 호출의 컨텍스트를 식별하십시오. 샘플 구현에서 이를 더 잘 이해할 수 있습니다. 샘플에서 "ctx"는 사용된 또 다른 매개변수 정의입니다. clientErrorCallback에서 호출되는 메소드의 이름입니다. 오류가 발생한 경우 CallBackManager를 사용하세요.
이 메소드에서 반환되는 문자열은 다음과 같습니다.
__doCallback('__Page',arg,CallBackHandler,ctx, ErrorCallBack)
또 다른 오버로드된 메서드는 다음과 같습니다.
공개 문자열 GetCallbackEventReference(
제어 제어, 문자열 인수,
문자열 clientCallback, 문자열 컨텍스트)
공개 문자열 GetCallbackEventReference(
제어 제어, 문자열 인수,
문자열 clientCallback, 문자열 컨텍스트,
문자열 clientErrorCallback)