2017-01-27 1 views
0

저는 ASP.net에 익숙하지 않고 일부 느린 코드를 더 빠르게 실행하려고합니다.ASP.net : 전체 페이지를 새로 고치지 않고 GridView를 새로 고치십니까? (AsyncPostBackTrigger really slow)

현재 코드는 UpdatePanel 내의 GridView를 사용하고 있습니다. UpdatePanel은 모달 팝업 창 안에 있습니다. 해당 모달을 열 때마다 내용을 새로 고쳐야합니다. AsyncPostBackTrigger를 사용하여이 작업을 수행합니다. AsyncPostBackTrigger는 테이블을 반환하고 렌더링하기 전에 전체 페이지 생성주기를 거친다는 것을 알고 있습니다.

.aspx.cs

public void UpdateWatchListPopup(object sender, System.EventArgs e) 
{ 
    grdWatchList.DataBind(); 
} 

에서 .aspx :

<asp:UpdatePanel ID="UpdatePanel3" runat="server" > 

    <Triggers> 
     <asp:AsyncPostBackTrigger ControlID="UpdateWatchListPopupBtn" EventName="Click" /> 
    </Triggers> 

    <ContentTemplate> 

     <div style="display:none"> 
      <asp:Button ID="UpdateWatchListPopupBtn" runat="server" Text="" OnClick="UpdateWatchListPopup" /> 
     </div> 

     <asp:GridView ID="grdWatchList" OnSorting="grdWatchList_Sorting" runat="server" OnRowCreated="grdWatchList_RowCreated" OnRowDataBound="grdWatchList_RowDataBound" AllowSorting="true" AutoGenerateColumns="False"> 
      <Columns> 
       <asp:TemplateField> 

이 (가 결과를 표시하기 위해 5 초 소요), 그리고 많은이 있기 때문에 그렇지 정말 느리다 반환 할 데이터! 내 생각 엔 Page_Load()는 특정 GridView를 새로 고치는 데 불필요한 계산을 수행하는 것입니다.

GridView를 비동기 적으로 새로 고치는 다른 방법이 있습니까? WebMethod를 사용하여 데이터를 가져온 다음 클라이언트 측에서 테이블을 수동으로 다시 채우는 방법에 대해 생각했습니다. 다른 옵션이 있는지 궁금 해서요?

+0

합니까 페이지도 처음으로로드하는 데 5 초가 걸립니까? – VDWWD

+0

예. 기본적으로 전체 응용 프로그램은 단일 페이지에 있으며 모든 데이터는 처음에 가져옵니다. –

답변

1

당신은 반드시 팝업을 열 수있는 다시 게시가 필요하지 않습니다 감사합니다. 다음은 jQuery UI Dialo g를 사용하는 스 니펫입니다.

<div id="hiddenGrid" style="display: none"> 
    <asp:GridView ID="GridView1" runat="server"></asp:GridView> 
</div> 

<input type="button" value="Open Dialog" onclick="createPopup()" /> 

<script type="text/javascript"> 
    function createPopup() { 
     var html = document.getElementById('hiddenGrid').innerHTML; 
     $('<div />').html(html).dialog({ 
      resizable: false, 
      draggable: true, 
      modal: true, 
      width: 600, 
      height: 800, 
      create: function (event, ui) { 
       $(".ui-dialog-titlebar").html("<div onclick=\"closePopup()\" class=\"dialog-closeButton\"></div>"); 
      }, 
      open: function (event, ui) { 
       $('.ui-widget-overlay').bind('click', function() { 
        closePopup(); 
       }) 
      } 
     }); 
    } 

    function closePopup() { 
     $(".ui-dialog-content").dialog("destroy"); 
    } 
</script> 

그러나 당신이 다시 게시와 함께 모달를 열어야합니다, 당신은 비동기 다시 게시 있는지 확인하고 필요하지 않은를 Page_Load의 항목을 건너 뛸 수 있습니다.

protected void Page_Load(object sender, EventArgs e) 
{ 
    if (ScriptManager.GetCurrent(this.Page).IsInAsyncPostBack) 
    { 
     //updatepanel page load 
    } 
    else 
    { 
     //normal page load 
    } 
} 
+0

오 감사합니다! 실행이 포스트 백인지 알아낼 수 있는지 몰랐습니다. 솔루션 구현을 시도했지만 여전히 느립니다 (실행 시간은 향상되었지만). Page_Load() 이외의 모든로드에서 실행되는 다른 요소가 있습니까? –

+1

아마도 [페이지 수명주기] (http://stackoverflow.com/documentation/asp.net/4948/page-life-cycle#t=201701272156182560526)를 살펴보십시오. Page_Load 이전에 메소드를 사용하면 작업 속도가 느려질 수 있습니다. – VDWWD

2

당신은 내가 주로 ASPNET MVC와 함께, 지금은 꽤 많은 시간 동안 JQuery와 datables를 사용하고 클라이언트 측 격자를 사용하는 것이 좋습니다하지만 당신은 또한 웹 양식에 이것을 사용할 수 있습니다. 시작하기가 정말 쉽습니다. 거기에 좋은 예제가 많고 가장 좋은 부분은 포스트 백이 없다는 것입니다. 이 도구는 등

Heres는 '웹에서 실행 JQuery와 datatables의 좋은 예 http://datatables.extrared.net/Sample/

을 형성를 검색, 정렬, 페이징 내장되어 있습니다 그리고 여기 당신이 JQuery와 datatables 시작할 수있는 곳입니다 https://datatables.net/

+1

전체 응용 프로그램을 다시 작성해야하지만 이것은 아마도 최상의 솔루션 일 것입니다. –

관련 문제