2011-03-25 4 views
1

하나의 컨트롤 (.ascx)이있는 ASP.NET 페이지가 있습니다. 페이지 (.aspx) onload는 몇 개의 텍스트를 몇 개의 레이블에 할당하고 제품 ID를 .ascx 컨트롤로 전달합니다. .ascx 컨트롤 인 onload는 .aspx 페이지에서 해당 제품 ID를 가져 와서 데이터베이스에 여러 번 도달하고, 여러 계산 등은 기본적으로로드하는 데 오랜 시간이 걸립니다..ASCX 컨트롤의로드가 완료되기 전에 .ASPX 페이지를 표시 할 수 있습니까?

그래서이 .aspx 페이지에 대한 링크를 클릭하면 페이지가로드되는 데 7-10 초가 걸립니다. 나는 그것을 줄이기 위해 .ascx 컨트롤을 범인으로 계산하고 가능한 한 코드를 최적화했습니다 ...하지만 여전히 너무 오래 걸리고 있습니다.

컨트롤이로드되기 전에 .aspx 페이지를로드하는 방법이 있습니까? ("Loading ..."애니메이션을 표시 할 수 있습니까? UpdateProgress에서 사용되는 것과 같습니다.)

+0

코드를 게시하는 데 7 초 정도 걸릴 수도 있습니다. 이는 계산 및 쿼리를 실행하는 데 엄청난 시간입니다. 아마도 데이터베이스에 더 나은 인덱스가 필요할 것 같습니다. – NotMe

답변

1

이 작업을 수행하는 유일한 방법은 별도의 HTTP 리소스로 설정하는 것입니다. 현재 .NET은 컨트롤을 페이지에 통합하여 응답해야하는 모든 것이있을 때까지 기다리고 있습니다. 동일에있을 표시하는 컨트롤이 포함 된 (그리고 iframe 내에 호스팅되는 자바 스크립트

  • 별도의 페이지를 통해 호출되는

    • 웹 서비스 :

      이 여러 가지 방식으로 할 수 페이지)

    가장 좋은 방법은 iFrame (또는 이와 유사한)을 사용하여 브라우저가 기본 페이지를 보낸 후 컨트롤에 요청하도록하는 것입니다.

  • 1

    필자는 개인적으로 iFrame을 사용하여 페이지의 콘텐츠를로드하지 않습니다. 이는 무엇보다도 해킹과 같고 iframe == "불량"입니다.

    하지만 그들이 옳다면, 당신이 원하는 것을 무엇이든 할 수 없을 것입니다.

    사용자 정의 컨트롤에 포스트 백을 발생시키는 웹 컨트롤이 없거나 포스트 백 중에 액세스해야하는 양식 컨트롤이 있으면 페이지가 있으면 서버에서 데이터를 요청하기 위해 AJAX를 사용합니다. 이미로드 및 자바 스크립트를 사용하여 페이지에 콘텐츠를 표시합니다.

    2

    UpdatePanel을 사용하여이 작업을 수행 할 수 있습니다. 약간의 트릭이 발생하지만 다음과 같이 시도하십시오.

    1) UpdatePanelUserControl을 넣으십시오.

    2) 사용자 컨트롤에 public 속성을 IsEnabled 같이 두어 조건부로 아무 것도하지 않거나 "기다려주십시오."라고 표시합니다. 메인 페이지에서 false로 설정하십시오.

    3) 메인 페이지에 OnInit 일부 코드를 추가

    if (MyScriptManager.IsInAsyncPostback) { 
        MyUserControl.IsEnabled=true; 
    } 
    

    4)이 라인을 따라 클라이언트 스크립트를 추가

    finished=false; 
    Sys.WebForms.PageRequestManager.pageLoaded(function(sender,args) { 
        if (!finished) { 
         finished=true; 
         __doPostBack('',''); 
         // you can include the uniqueID of your updatepanel as the first arg 
        // otherwise it will refresh all update panels 
        } 
    }); 
    

    또는 jQuery로

    ..이것은 무엇을해야

    finished=false; 
    $(document).ready(function() { 
        if (!finished) {... 
        } 
    }); 
    

    페이지가 차례로 업데이트 패널이 새로 고쳐 원인이되는,로드가 완료 된 후 비동기 포스트 백 즉시 시작되도록 할 것입니다. 비동기 포스트 백에있을 때 활성화되도록 설정 했으므로 두 번째 렌더링됩니다.

    관련 문제