2011-09-15 7 views
0

수많은 체크를 실행하는 사이트를 만들었습니다. 이러한 확인은 버튼을 통해 시작되며 완료하는 데 몇 분이 걸립니다 (기본적으로 데이터 검사가 실행되고 mysql 데이터베이스에 기록됩니다). 다음 gridview 컨트롤을 MySQL 데이터베이스에 바인딩 된 및 검사가 완료되면 페이지 새로 고침 및 gridviews 업데이트됩니다 .. 완벽한!포스트 백이 붙어 있습니다.

이 나는 ​​일이 일어나고있는 사용자 ...

가 즉시 버튼이 체크로, 사이트가 긴 새로 고침 상태가됩니다 말할 수 없다는 사실을 제외하고 모두 좋다. 페이지의 모든 레이블을 업데이트하여 실행 중임을 알립니다. C# 코드가 완료되면 모든 레이블이 업데이트됩니다.

나는 서버에서 # 백그라운드 작업자가 서버에서 페이지가 돌아가고 레이블이 업데이트 된 다음 (백그라운드 작업자가 이벤트를 완료하면 데이터 그 룹을 바인딩 함) 긴 기쁨의 작업을 처리하려고했지만 아무런 기쁨도 보이지 않았습니다. 단지 페이지 만 배경 작업자가 완료되기를 기다립니다!

또한 업데이트 패널을 추가하고 패널 안의 레이블을 추가 한 다음 panel.update()를 다시 호출 해 보았습니다. 다시 말하지만 실제로는 모든 코드가 종료 될 때까지 업데이트되지 않습니다.

기술적이지 않은 아이디어입니까? 모든 코드가 추가되어 대단히 감사하겠습니다.

+0

예, scriptmanager를 추가했지만 제대로 작동하지 않습니다. –

+0

아약스 컨트롤에서 단추 대신 C# 코드를 시작해야한다고 말하는 것입니까? –

+3

scriptmanager를 사용하여 asp.net의 updatepanels에서 초기 읽기를 수행하십시오. 그냥 구글 ASP.net updatepanel, 당신은 updatepanel 내에 gridview 컨트롤의 일종을 던져해야합니다. 업데이트 패널 내에서 데이터가 업데이트되는 동안 업데이트되는 진행률 표시 줄이나 레이블을 가질 수 있습니다. – JonH

답변

1

이렇게하는 가장 쉬운 방법은 미리 만들어진 "UpdateProgress"컨트롤을 사용하는 것입니다.

새 페이지를 만들고 방금 아이디어를 보여준이 예제를 실행 해보십시오. 페이지가 버튼을 클릭했을 때의로드 텍스트가 5 초 후에 페이지 내용 변경 및 부하 메시지가 사라 :

ASP 내용 :

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 

    <asp:UpdateProgress AssociatedUpdatePanelID="UpdatePanel1" runat="server"> 
     <ProgressTemplate> 
      <p>text that indicates stuff is happening in the background (example: loading please wait)</p>   
     </ProgressTemplate> 
    </asp:UpdateProgress> 


    <asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
     <ContentTemplate> 

      <asp:Button ID="Button1" runat="server" Text="Click me!" 
       onclick="Button1_Click" /> 
      <br /> 
      <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>   

     </ContentTemplate> 
     <Triggers> 
      <asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" /> 
     </Triggers> 
    </asp:UpdatePanel> 

CS 내용 :

protected void Button1_Click(object sender, EventArgs e) 
    { 
     //wait five seconds to demonstrate the idea 
     System.Threading.Thread.Sleep(5000); 

     //update page content 
     Label1.Text = "Stuff in the background has finished executing and the page has been loaded with the new content."; 
    } 

을 참고로 궁금한 점이 있으시면이 코드를 ScriptManager, UpdateProgress 컨트롤,로드 텍스트로 추가하고 코드를 단추 뒤 코드에 넣으십시오.

관련 문제