Atlas에는 부분 업데이트를 지원하는 UpdatePanel 컨트롤이 있습니다. 물론 Mode="Conditional"을 지정하면 ScriptManager도 EnablePartialRendering="true"로 설정해야 합니다.
xmlHttp를 사용한 부분 업데이트. 프로세스는 다음과 같습니다.
1: 포스트백 중에 페이지의 js가 페이지의 데이터를 포스트백합니다(전체 페이지를 포스트백해야 함).
2: 백그라운드가 요청을 수신하고 처리를 시작합니다(페이지의 pageLoad가 트리거될 수 있음).
3: 처리 후 업데이트할 데이터만 페이지로 다시 보냅니다(업데이트하려는 UpdatePanel의 이름에 따라 다시 보낼 데이터 부분을 결정합니다. 이것은 this.updatePanelXX.Update()의 코드입니다. )
4: 페이지(클라이언트)는 포스트백 데이터 중 이 부분만 업데이트합니다(소위 부분 업데이트라고 하며, 방법은 updatePanle을 찾은 다음 UpdatePanel.InnerHtml=PostBackData를 찾는 것입니다. 직접 대체됩니다.)
여기에서 소위 부분 업데이트라고 불리는 새로운 것은 지정된 updatePanel 부분만 다시 그리는 것입니다(서버에 다시 게시할 때 전체 페이지를 다시 게시해야 하며, 배경 코드는 이전처럼 각각을 처리하지만 일부만 다시 그리는 것입니다). 처리 결과 중 일부가 클라이언트에 반환됩니다.
이런 방식으로 UpdatePanle이 처리되는 동안 페이지의 js 처리를 트리거하려는 경우 매우 어려울 것입니다. 다시 게시하는 모든 데이터는 작은 구석에 업데이트되므로 이전 Response.Write(js)는 전혀 작동하지 않습니다.
해결책은 다음과 같습니다.
this.Page.ClientScript.RegisterStartupScript(this.GetType(), "OpenOverViewPart", openScript); RegisterStartupScript 메소드를 이용하여 js 함수를 등록해야 원활한 실행이 가능합니다.
실제로 Atlas가 부분 업데이트를 수행한 후에는 페이지의 모든 js가 함께 배치되므로 실행이 그다지 원활하지 않습니다. 따라서 자신의 업무에 유의하세요. 따라서 약간의 영향을 미칠 것입니다. 많은 js에는 다음과 같은 것이 있습니다. <! - 및 기타 주석 기호를 조심하지 않으면 자신의 js에도 주석이 달립니다. 사실 이게 더 문제다.
해결책은 X입니다. js 출력 스타일을 직접 제어하고 주석이 아님을 표시하기 위해 캐리지 리턴을 몇 개 더 추가해야 합니다.
string openScript = "nt";
openScript = "<script" + " type='text/javascript'>rn"
+ "rn"
+ "var a=0;rn"
+ "opener.top.__doPostBack('" + Request.Params["refresh"] + "','refresh');rn"
+ "window.opener.focus();"
+ "window.close();"
+ "<" + "/script" + ">";