2012-05-28 1 views
2

제가 알다시피 UpdatePanel이 업데이트되면 전체 페이지가 재구성되지만 UpdatePanel 내의 내용 만 실제로 페이지에 다시로드됩니다.서버의 UpdatePanel 전체로드 페이지가 없습니다.

(데이터베이스 호출로 인해) 일부 페이지는 렌더링 속도가 매우 느리고 페이지의 작은 부분 만 다시로드해야하는 경우 모든 페이지를 다시로드하지 않으려는 경우 포스트 백이 필요합니다.

예 - 페이지 상단 (UpdatePanel 외부)에 총계가 표시되고 UpdatePanel에는 '다음 페이지'버튼이있는 눈금이 있습니다. '다음'을 클릭하면 그리드가 업데이트되기를 원하지만 서버가 모든 총계에 대해 데이터베이스를 다시 쿼리하지 않게하려고합니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변

0

항상 페이지의 IsAsync 속성을 검사하여 코드 블록 실행을 제외 할 수 있습니다.

0

표준 접근법은 합계 논리를 실행하기 전에! 포스트 백 검사를 수행하는 것입니다. 그런 식으로 페이지를 처음로드 할 때만 계산되고 표시되는 컨트롤의 ViewState에 유지됩니다.

또는 ObjectDataSource를 사용하여 데이터 바인딩을 사용하면 데이터 바인딩은 페이지가 처음로드 될 때만 발생하기 때문에 자동으로 처리됩니다.

1

포스트 백이 업데이트 패널에 있는지 확인할 수 있습니다. 그렇다면 합계를 계산하지 마십시오. 당신은 당신이 바로 부울을 설정하기위한 IsInAsyncPostback를 확인하실 수 있습니다 페이지에 하나 updatepanel이있는 경우

bool isUpdatePanelPostBack 
     = ScriptManager.GetCurrent(Page).AsyncPostBackSourceElementID 
      .Equals(yourUpdatePanel.UniqueID); 

if(!isUpdatePanelPostBack) { 
    //calculate your totals 
} 

:

당신은 당신이 선택하여 다시 게시 한 일 updatepanel 확인할 수 있습니다 후 여러 updatepanels가있는 경우 :

bool isUpdatePanelPostback = ScriptManager.GetCurrent(Page).IsInAsyncPostBack;