번역: 발렌스
시간: 2007-06-11
원본 텍스트: http://ajax.asp.net/docs/overview/AJAXClientEvents.aspx
누구나 의견을 제시할 수 있으며 적극적으로 수정하겠습니다!
소개 [소개]
Microsoft Ajax는 ASP.NET 2.0 페이지의 서버측 수명 주기 이벤트와 유사한 클라이언트측 수명 주기 이벤트를 제안합니다. 이러한 클라이언트 측 이벤트를 사용하면 기존 포스트백과 비동기 포스트백(부분 페이지 새로 고침) 모두에 대해 사용자 인터페이스를 사용자 정의할 수 있습니다. 또한 페이지 수명 주기 전반에 걸쳐 사용자 정의 스크립트를 관리하고 사용하는 데 도움이 될 수 있습니다.
이러한 클라이언트 측 이벤트는 Microsoft의 AJAX Libray 클래스에서 제안됩니다(AJAX Libray 클래스에서 찾을 수 있음). 이러한 클래스는 AJAX로 서버 컨트롤을 로드할 때 자동으로 인스턴스화(인스턴스화?)됩니다. 이러한 클래스는 이벤트를 이벤트 공급자 핸들러에 바인딩할 수 있도록 몇 가지 API를 제공합니다. AJAX 라이브러리는 브라우저 독립적이므로 작성한 코드는 지원되는 모든 브라우저에서 작동합니다.
주요 이벤트는 요청과 비동기 포스트백을 시작하는 애플리케이션 인스턴스의 로드 이벤트입니다. 로드 핸들러 이벤트 중에 스크립트가 실행되면 모든 스크립트와 구성 요소가 로드되어 사용 가능해집니다. UpdatePanel 컨트롤을 사용하여 페이지의 일부를 새로 고칠 때 모든 클라이언트 이벤트 중 가장 중요한 것은 PageRequestManager 클래스입니다. 이러한 클라이언트 측 이벤트를 사용하면 특정 시나리오를 구현할 수 있습니다. 예를 들면 다음과 같습니다. 포스트백 실행 취소, 포스트백에 대해 더 높은 우선 순위 설정, 새로 고칠 때 UpdatePanel의 상호 작용 향상.
이러한 이벤트는 페이지를 만들거나 구성 요소를 작성하는 데 매우 유용합니다. 웹 개발자라면 페이지 로드 및 언로드에 사용자 정의 스크립트를 사용할 수 있습니다.
서버 측 수명 주기 이벤트에 대한 자세한 내용은 ASP.NET 페이지 수명 주기 개요를 참조하세요.
Microsoft AJAX 클래스 라이브러리의
클라이언트 클래스는
AJAX 웹 페이지의 클라이언트 수명 주기에서 두 가지 주요 클래스를 제안합니다.애플리케이션 클래스 및 PageRequestManager 클래스.
Application 클래스는 브라우저가 ScriptManager 컨트롤이 포함된 페이지를 요청할 때 인스턴스화됩니다. Application 클래스는 서버측 Page 컨트롤과 유사하지만 Control 클래스에서 상속되지만 서버측 이벤트와 비교하여 몇 가지 추가 기능이 있습니다. 마찬가지로 Application은 Sys.COmComponent 클래스를 상속합니다. 또한 클라이언트 수명 주기 동안 작동 가능한 많은 이벤트도 제공합니다.
페이지에 ScriptManager와 하나 이상의 UpdatePanel 컨트롤이 포함되어 있으면 페이지에서 부분 업데이트 효과를 얻을 수 있습니다. 이 경우 PageRequestManager 클래스의 인스턴스를 브라우저에서 사용할 수 있습니다. PageRequestManager가 제공하는 클라이언트 이벤트는 모두 비동기 포스트백에 관한 것입니다. 부분 페이지 생성에 대한 자세한 내용은 다음을 참조하세요. 부분 페이지 렌더링 개요
클라이언트 이벤트에 대한 핸들러 추가 [클라이언트 이벤트에 대한 핸들러 추가]
이제 Application 및 PageRequestManager 클래스에서 add_eventname 및 reomve_eventname 메서드를 사용하여 이벤트를 추가하거나 제거합니다. 다음 예제에서는 Application 객체의 init 이벤트에 MyLoad라는 핸들러를 추가하는 방법을 보여줍니다.
Sys.Application.add_init(MyInit);
함수 MyInit(발신자) {
}
Sys.Appplication.remove_init(MyInit);
설명 이 예에서는 add_eventname 및 Remove_eventname 메서드를 사용하는 구문만 보여줍니다. 이 이벤트 사용에 대한 자세한 내용은 이후 항목에서 제공됩니다.
애플리케이션 로드 및 언로드 이벤트 처리 [작업 애플리케이션의 로드 및 언로드 이벤트]
Application 개체의 로드 및 언로드 이벤트를 작업하기 위해 명시적으로 작업 이벤트에 바인딩할 필요는 없습니다. 대신 예약 키워드 pageLoad 및 pageUnload를 사용하여 직접 함수를 생성할 수 있습니다. 다음 예에서는 애플리케이션의 로드 이벤트에 작업을 추가하는 방법을 보여줍니다.
function pageLoad(sender, args) {
}
기타 클라이언트 클래스에 대한 이벤트 [기타 클라이언트 클래스]
이 항목에서는 Application 및 PageRequestManager 클래스에서 제공하는 이벤트에 대해서만 설명합니다. Microsoft의 AJAX 클래스 라이브러리에는 DOM 요소 이벤트를 추가, 지우기 및 제거하기 위한 다음 클래스도 포함되어 있습니다. 이러한 클래스는 다음과 같습니다.
Sys.UI.DomEvent.addHandler 메서드 또는 약식 $addHandler가 있습니다.
Sys.UI.DomEvent.clearHandlers 메서드 또는 약식 $clearHandlers가 있습니다
.
RemoveHandler.
DOM 원칙에 의해 제공되는 이벤트는 이 주제에서 논의되지 않습니다.
Application 및 PageRequestManager 클래스의 클라이언트 이벤트 [Application 및 PageRequestManager 클래스의 클라이언트 이벤트]
다음 표에는 AJAX ASP.NET 페이지에서 사용할 수 있는 Application 및 PageRequestManager 클래스의 클라이언트 이벤트가 나열되어 있습니다. 이벤트 순서는 이후 주제에서 논의됩니다.
이벤트
(이벤트 이름)
설명
(설명하다)
초기화이벤트
[초기화 이벤트]
이 이벤트는 모든 스크립트가 로드된 후 개체가 생성되기 전에 발생합니다. 구성 요소(스크립트)를 작성하려는 경우 init 이벤트는 페이지에 구성 요소(스크립트)를 추가하기 위한 수명 주기의 지점을 제공합니다. 이 구성요소는 라이프사이클의 다른 스크립트에서 호출될 수 있습니다. 웹 개발자라면 대부분의 경우 init 이벤트 대신 load 이벤트를 사용하는 것을 권장합니다.
init 이벤트는 페이지 생성이 시작될 때 한 번만 생성됩니다. 후속 부분 페이지 새로 고침은 init 이벤트를 트리거하지 않습니다.
로드 이벤트
[로딩 이벤트]
이 이벤트는 모든 스크립트가 로드되고 $create로 초기화된 모든 프로그램 개체가 생성된 후에 발생합니다. 이 이벤트는 비동기 포스트백을 포함하여 서버에 대한 모든 포스트백에 의해 발생됩니다.
웹 개발자라면 로드 이벤트 자체에서 제공하는 pageLoad라는 함수를 만들 수 있습니다. pageLoad 작업(핸들러)은 add_load 메서드를 통해 로드 이벤트에 추가된 작업 후에 호출될 수 있습니다.
로드 이벤트에는 eventargs 매개 변수로 Sys.ApplicationLoadEventArgs 개체가 필요합니다. 이 매개변수를 사용하여 페이지에 부분 새로 고침을 표시해야 하는지 여부를 결정할 수 있으며, 마지막 로드 이벤트가 발생한 후 생성되어야 하는 구성 요소를 결정할 수도 있습니다.
언로드 이벤트
[제거 이벤트]
모든 객체가 해제되기 전과 브라우저의 window.unload 이벤트가 발생하기 전에 발생합니다.
시스템 자체에서 제공하는 pageUnload라는 함수를 통해 언로드 이벤트를 처리할 수 있습니다. pageUnload 이벤트는 페이지가 브라우저에서 언로드될 때 호출됩니다. 이 이벤트 동안 우리는 코드가 점유하고 있는 모든 리소스를 해제해야 합니다.
propertyChanged 이벤트
[속성변경 이벤트]
구성 요소의 속성이 변경되면 발생합니다. 응용 프로그램 객체는 Component 클래스에서 이 이벤트를 상속합니다. 이 이벤트는 개발자가 속성 값을 설정할 때 Sys.Component.raisePropertyChange 메서드를 호출하는 경우에만 발생합니다.
자세한 내용은 사용자 지정 구성 요소 속성 정의 및 PropertyChanged 이벤트 발생을 참조하세요.
속성 변경 이벤트에는 eventargs 매개 변수로 Sys.applicationLoadEventArgs 개체가 필요합니다.
이벤트 처리
[출시 이벤트]
이 이벤트는 애플리케이션 인스턴스가 해제될 때 발생합니다. 응용 프로그램 객체는 Component 클래스에서 이 이벤트를 상속합니다.
초기화요청 이벤트
[초기화 요청 이벤트]
이 이벤트는 비동기 요청 시작 시 발생합니다. 이 이벤트를 사용하여 기존 포스트백을 취소할 수 있습니다. 예를 들어 비동기 포스트백이 우선적으로 적용되도록 할 수 있습니다.
초기화 요청 이벤트에는 Sys.WebForms.InitializeRequestEventArgs 개체에서 제공하는 eventargs 매개 변수가 필요합니다. 이 개체는 포스트백 및 기본 요청을 유발하는 개체의 유용한 요소를 제공합니다. 이 이벤트는 취소 속성도 노출합니다. 취소를 true로 설정하면 새 포스트백이 취소됩니다.
startRequest 이벤트
[시작요청 이벤트]
이 이벤트는 서버에 대한 비동기 포스트백이 시작되기 전에 발생합니다. 포스트백 프로세스가 이미 존재하는 경우 abortPostBack 메서드를 사용하여 중지됩니다. 이 이벤트를 사용하여 요청 헤더를 설정하거나 페이지에 흥미로운(애니메이션) 프롬프트를 표시하여 요청이 진행 중임을 나타낼 수 있습니다.
이 이벤트에는 eventargs 매개 변수로 Sys.WebForms.BeginRequestEventArgs 개체가 필요합니다. 이 개체는 포스트백 및 기본 요청 개체를 발생시키는 데 유용한 요소를 제공합니다.
pageLoading 이벤트
[페이지 로딩 이벤트]
서버에서 비동기 포스트백을 수신한 경우 페이지의 콘텐츠가 업데이트되기 전에 발생합니다. 이 이벤트를 사용하여 업데이트해야 하는 콘텐츠에 대한 사용자 지정 전환 효과를 제공할 수 있습니다.
이 이벤트에는 eventargs 매개 변수로 Sys.WebForms.PageLoadingEventArgs 개체가 필요합니다. 이 개체는 가장 최근의 비동기 포스트백의 결과로 어떤 패널이 삭제되고 업데이트되는지에 대한 유용한 정보를 제공합니다.
pageLoaded 이벤트
[페이지 로딩 완료 이벤트]
동기 또는 비동기 포스트백 결과에 의해 페이지의 모든 콘텐츠가 새로 고쳐진 후에 발생합니다. 동기 포스트백 중에는 패널을 생성만 할 수 있지만, 비동기 포스트백 중에는 패널을 생성하고 업데이트할 수 있습니다. 이 이벤트를 사용하여 업데이트해야 하는 콘텐츠에 대한 사용자 정의 변경 효과를 관리할 수 있습니다.
이 이벤트에는 eventargs 매개 변수로 Sys.WebForms.PageLoadedEventArgs 개체가 필요합니다. 이 개체는 가장 최근 포스트백 중에 어떤 패널이 업데이트되고 생성되었는지에 대한 유용한 정보를 제공합니다.
endRequest 이벤트
[요청 이벤트 종료]
응답으로 비동기 포스트백이 완료되고 페이지가 업데이트된 후 또는 요청 중에 오류가 발생한 후에 발생합니다. 오류가 발생하면 페이지가 업데이트되지 않습니다. 이 이벤트를 사용하여 방문자에게 맞춤형 오류 메시지를 제공하거나 오류 로그에 로그인하세요.
이 이벤트에는 eventargs 매개 변수로 Sys.WebForms.EndRequestEventArgs 개체가 필요합니다. 이 개체는 발생한 오류 및 오류 처리 여부에 대한 몇 가지 유용한 정보를 제공합니다. 또한 해당 개체에 대해 사용 가능한 정보를 제공합니다.
이벤트 순서 예 [이벤트 순서 예]
다음 예에서는 두 개의 중첩된 UpdatePanel 컨트롤이 있는 페이지에서 클라이언트 측 이벤트가 발생하는 방법을 보여줍니다. 상위 패널의 버튼을 클릭하는 것과 포함된 패널의 버튼을 클릭하는 것의 차이점에 유의하세요. 상위 패널에 있는 버튼을 누르면 상위 패널이 업데이트되고, 그 안에 포함된 패널이 삭제되고 다시 생성됩니다. 패널이 내장된 버튼은 내장 패널만 업데이트합니다.
페이지 코드:
1<%@ 페이지 언어="C#" %>
2
3<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4 " http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd ">
5
6<script runat="서버">
7
8</script>
9
10<html xmlns=" http://www.w3.org/1999/xhtml " >
11<head runat="서버">
12 <title>클라이언트 이벤트 예시</title>
13 <스타일 유형="텍스트/css">
14 #OuterPanel { 너비: 600px; 높이: 200px; 단색 파란색 }
15 #NestedPanel { 너비: 596px; 높이: 60px; 단색 녹색;
16 여백-왼쪽:5px; 여백-오른쪽:5px;}
17 </style>
18</head>
19<본체>
20 <form id="form1" runat="서버">
21 <div>
22 <asp:ScriptManager ID="ScriptManager1" runat="서버">
23 <스크립트>
24 <asp:ScriptReference Path="ClientEventTest.js" />
25 </스크립트>
26 </asp:스크립트매니저>
27 <asp:UpdatePanel ID="OuterPanel" UpdateMode="조건부" runat="서버">
28 <컨텐츠템플릿>
29 외부 패널과 내부 패널 내부의 포스트백은
30개의 비동기 포스트백. PRM = Sys.WebForms.PageRequestManager. APP = Sys.Application.
31
32 <br /><br />
33 <asp:Button ID="OPButton1" Text="외부 패널 버튼" runat="서버" />
34 마지막 업데이트 날짜
35 <%= DateTime.Now.ToString() %>
36 <br /><br />
37
38 <asp:UpdatePanel ID="NestedPanel" UpdateMode="조건부" runat="서버">
39 <컨텐츠템플릿>
40 <asp:Button ID="NPButton1" Text="중첩 패널 1 버튼" runat="서버" />
41 마지막 업데이트 날짜
42 <%= DateTime.Now.ToString() %>
43 <br />
44 </ContentTemplate>
45 </asp:업데이트패널>
46 </ContentTemplate>
47 </asp:업데이트패널>
48
49 <input type="button" onclick="Clear();" value="지우기" />
50
51 <asp:Button ID="FullPostBack" runat="server" Text="전체 포스트백" />
52 <a href=" http://www.microsoft.com">테스트 창 언로드</a>
53 <br />
54 <span id="ClientEvents"></span>
55 </div>
56 </form>
57</body>
58</html>
59
스크립트 코드:
1// 애플리케이션 이벤트 핸들러를 연결합니다.
2var 앱 = Sys.Application;
3app.add_load(ApplicationLoad);
4app.add_init(ApplicationInit);
5app.add_disposing(ApplicationDisposing);
6app.add_unload(ApplicationUnload);
7
8
9//컴포넌트 개발자를 위한 애플리케이션 이벤트 핸들러.
10기능 ApplicationInit(발신자) {
11 var prm = Sys.WebForms.PageRequestManager.getInstance();
12 if (!prm.get_isInAsyncPostBack())
13 {
14 prm.add_initializeRequest(InitializeRequest);
15 prm.add_beginRequest(BeginRequest);
16 prm.add_pageLoading(페이지로딩);
17 prm.add_pageLoaded(페이지로드됨);
18 prm.add_endRequest(EndRequest);
19}
20 $get('ClientEvents').innerHTML += "APP:: 애플리케이션 초기화. <br/>";
스물 하나}
22함수 ApplicationLoad(sender, args) {
23 $get('ClientEvents').innerHTML += "APP:: 애플리케이션 로드. ";
24 $get('ClientEvents').innerHTML += "(isPartialLoad = " + args.get_isPartialLoad() + ")<br/>";
25}
26기능 ApplicationUnload(송신자) {
27 Alert('APP::애플리케이션 언로드.');
28}
29함수 ApplicationDisposing(sender) {
30 $get('ClientEvents').innerHTML += "APP:: 애플리케이션 삭제. <br/>";
31
32}
33//페이지 개발자를 위한 애플리케이션 이벤트 핸들러.
34함수 페이지로드() {
35 $get('ClientEvents').innerHTML += "PAGE:: 로드.<br/>";
36}
37
38함수 페이지Unload() {
39 Alert('페이지:: 페이지 언로드.');
40}
41
42// PageRequestManager 이벤트 핸들러.
43함수 초기화요청(sender, args) {
44 $get('ClientEvents').innerHTML += "<hr/>";
45 $get('ClientEvents').innerHTML += "PRM:: 비동기 요청 초기화 중.<br/>";
46}
47함수 BeginRequest(sender, args) {
48 $get('ClientEvents').innerHTML += "PRM:: 비동기 요청 처리를 시작합니다.<br/>";
49}
50기능 PageLoading(sender, args) {
51 $get('ClientEvents').innerHTML += "PRM:: 비동기 요청 결과 로드 중.<br/>";
52 var selectedPanels = printArray("PanelsUpdating", args.get_panelsUpdating());
53 var deletePanels = printArray("PanelsDeleting", args.get_panelsDeleting());
54
55 var 메시지 = "-->" + updatePanels + "<br/>-->" + deletePanels + "<br/>";
56
57 document.getElementById("ClientEvents").innerHTML += 메시지;
58}
59함수 PageLoaded(sender, args) {
60 $get('ClientEvents').innerHTML += "PRM:: 비동기 요청 결과 로드가 완료되었습니다.<br/>";
61 var updatePanels = printArray("PanelsUpdated", args.get_panelsUpdated());
62 var CreatePanels = printArray("PaneslCreated", args.get_panelsCreated());
63
64 var message = "-->" + updatePanels + "<br/>-->" + CreatePanels + "<br/>";
65
66 document.getElementById("ClientEvents").innerHTML += 메시지;
67}
68함수 EndRequest(sender, args) {
69 $get('ClientEvents').innerHTML += "PRM:: 비동기 요청이 종료되었습니다.<br/>";
70}
71
72// 도우미 기능.
73기능지우기()
74{
75 $get('ClientEvents').innerHTML = "";
76}
77함수 printArray(이름, arr)
78{
79 var 패널 = 이름 + '=' + arr.length;
80 if(배열 길이 > 0)
81 {
82개 패널 += "(";
83 for(var i = 0; i < arr.length; i++)
84 {
85개 패널 += arr[i].id + ',';
86}
87개 패널 = panel.substring(0, panel.length - 1);
88개 패널 += ")";
89 }
90개의 리턴 패널;
91}
92
실행 효과 코드 보기
일반 시나리오의 이벤트 순서 [일반 이벤트 순서]
이벤트 트리거 순서는 여전히 페이지에서 사용되는 컨트롤과 발생하는 요청 유형(초기화 요청, 기존 포스트백 또는 비동기 포스트백)에 따라 달라집니다. 이 섹션에서는 몇 가지 일반적인 시나리오에 대한 이벤트 요청 순서를 설명합니다.
초기 요청 [초기화 요청]
페이지 초기화 요청 중에 소수의 클라이언트 이벤트가 발생합니다. 초기화 요청의 시나리오는 다음과 같다고 가정합니다.
· 페이지에 ScriptManager 컨트롤이 포함되어 있고 컨트롤의 SupportsPartialRendering 및 EnablePartialRendering 속성이 모두 true입니다.
· 요청은 GET 유형입니다.
· 서버가 정상적으로 응답할 수 있습니다.
클라이언트 측에서 이벤트가 발생하는 순서는 다음과 같습니다.
1. 서버에 초기화 요청이 발생합니다.
2. 클라이언트가 응답을 받습니다.
3. 애플리케이션 인스턴스가 init 이벤트를 트리거합니다.
4. 애플리케이션 인스턴스가 로드 이벤트를 트리거합니다.
초기화 이벤트는 애플리케이션이 인스턴스화될 때 전체 페이지 수명 주기 동안 한 번만 발생합니다. 후속 비동기 포스트백에서는 발생하지 않습니다. 초기 요청(요청 참고) 중에는 PageRequestManager 이벤트가 발생하지 않습니다.
비동기 포스트백 [비동기 포스트백]
비동기 포스트백은 일부 페이지 데이터를 서버로 보내고 서버 측 응답을 받은 다음 페이지의 일부를 새로 고칩니다. 다음과 같은 비동기 포스트백 시나리오를 가정해 보겠습니다.
· 페이지에 ScriptManager 컨트롤이 포함되어 있고 컨트롤의 SupportsPartialRendering 및 EnablePartialRendering 속성이 모두 true입니다.
· 페이지에 UpdatePanel 컨트롤이 있고 해당 컨트롤의 ChildrenAsTriggers 속성 값이 true로 변경됩니다.
· UpdatePanel 내부에는 비동기 포스트백을 트리거하는 버튼이 있습니다.
· 서버 측으로부터 응답을 성공적으로 얻었습니다.
클라이언트 측에서 이벤트가 발생하는 순서는 다음과 같습니다.
1. UpdatePanel 컨트롤에서 버튼을 클릭하면 비동기 포스트백이 발생합니다.
2. PageRequestManager 인스턴스가 초기화 요청 이벤트를 트리거했습니다.
3. PageRequestManager 인스턴스가 BeginRequest 이벤트를 트리거했습니다.
4. 요청이 서버로 전송됩니다.
5. 클라이언트가 응답을 받습니다.
6. PageRequestManager 인스턴스가 pageLoading 이벤트를 트리거했습니다.
7. PageRequestManager 인스턴스가 pageLoaded 이벤트를 트리거했습니다.
8. 애플리케이션 인스턴스가 로드 이벤트를 트리거했습니다.
9. PageRequestManager 인스턴스가 endRequest 이벤트를 트리거했습니다.
애플리케이션의 로드 이벤트는 PageRequestManager의 pageLoaded 이벤트 뒤, endRequest 이벤트 앞입니다.
다중 비동기 포스트백 [Multiple Asynchronous Postbacks]
서버나 브라우저에서 이전 요청이 실행 중이고 사용자가 새 요청을 보내면 다중 비동기 포스트백이 발생합니다. 다음 시나리오에서는 여러 비동기 포스트백의 사례를 설명한다고 가정합니다.
· 페이지에 ScriptManager 컨트롤이 포함되어 있고 컨트롤의 SupportsPartialRendering 및 EnablePartialRendering 속성이 모두 true입니다.
· 페이지에는 UpdatePanel 컨트롤이 포함되어 있습니다.
· UpdatePanel에서 비동기 포스트백을 발생시키는 버튼 컨트롤을 두 번 클릭합니다. 두 번째 클릭은 서버가 첫 번째 클릭으로 시작된 요청을 처리하는 동안 발생합니다.
· 서버에서 반환된 첫 번째 요청에 대한 응답을 받았습니다.
클라이언트 측에서 이벤트가 발생하는 순서는 다음과 같습니다.
1. UpdatePanel의 버튼을 클릭하면 비동기 포스트백이 트리거됩니다.
2. PageRequestManager 인스턴스가 초기화 요청 이벤트를 트리거했습니다.
3. PageRequestManager 인스턴스가 BeginRequest 이벤트를 트리거했습니다.
4. 요청이 서버로 전송됩니다.
5. 클라이언트가 응답을 받습니다.
6. 버튼을 다시 클릭하면 두 번째 비동기 포스트백이 트리거됩니다.
7. PageRequestManager 인스턴스는 두 번째 클릭에 대해 초기화 요청 이벤트를 트리거합니다.
8. PageRequestManager 인스턴스는 두 번째 클릭에 대해 startRequest 이벤트를 트리거합니다.
9. 북부원정대의 두 번째 클릭 요청으로 서버를 스캔했습니다.
10. 클라이언트는 두 번째 클릭에 대한 응답을 받습니다.
11. PageRequestManager 인스턴스가 pageLoading 이벤트를 트리거했습니다.
12. PageRequestManager 인스턴스가 pageLoaded 이벤트를 트리거했습니다.
13. 애플리케이션 인스턴스가 로드 이벤트를 트리거했습니다.
14. PageRequestManager 인스턴스가 endRequest 이벤트를 트리거했습니다.
기본 비동기 포스트백 동작은 가장 최근의 비동기 포스트백이 우선 적용된다는 것입니다. 두 개의 비동기 포스트백이 순차적으로 발생하고 첫 번째 비동기 포스트백이 브라우저에서 아직 처리 중인 경우 첫 번째 비동기 포스트백이 취소됩니다. 첫 번째 포스트백이 서버로 전송된 경우 서버는 두 번째 요청이 도착할 때까지 첫 번째 요청을 반환하지 않습니다. 비동기 포스트백의 우선순위 설정 방법에 대한 자세한 내용은 특정 비동기 포스트백 우선순위를 참조하세요.
다른 페이지 탐색 [다른 페이지 탐색]
사용자가 한 페이지에서 다른 페이지에 접근하면 현재 페이지가 표시됩니다. 브라우저 언로드를 사용하면 언로드 이벤트를 작동하여 리소스를 해제할 수 있습니다. 이 시나리오가 아래에서 시뮬레이션되었다고 가정합니다.
· 페이지에 ScriptManager 컨트롤이 포함되어 있고 컨트롤의 SupportsPartialRendering 및 EnablePartialRendering 속성이 모두 true입니다.
· 대상 페이지가 존재합니다.
클라이언트 측에서 이벤트가 발생하는 순서는 다음과 같습니다.
1. 새 페이지에 대한 요청을 시작합니다.
2. 브라우저는 새 페이지를 요청하는 응답을 받습니다.
3. 애플리케이션 인스턴스가 언로드 이벤트를 트리거합니다.
4. 새 페이지가 표시됩니다.
새 페이지를 요청할 때 오류가 발생하면 unload 이벤트는 계속 발생하지만 새 페이지는 표시되지 않습니다.
【위에】