2017-01-27 375 views
0

我是新來的ASP.net,並試圖使一些超級慢代碼運行得更快。ASP.net:刷新GridView而不刷新整個頁面? (AsyncPostBackTrigger真的很慢)

目前,代碼在UpdatePanel中使用GridView。 UpdatePanel位於模式彈出窗口內。無論何時打開該模式,都必須刷新內容。我們通過使用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

謝謝!我不知道你是否可以檢測到執行是否是PostBack。 我嘗試實施解決方案,它仍然很慢(儘管執行時間有所改進)。除了Page_Load()以外的每個負載是否還有其他元素執行? –

+1

可能的話,請看[頁面生命週期](http://stackoverflow.com/documentation/asp.net/4948/page-life-cycle#t=201701272156182560526)。在Page_Load之前,Method中可能會有一些東西放慢速度。 – VDWWD

2

你可能要考慮使用一個客戶端電網,我一直在使用jQuery datables相當長的一段時間了,大多與ASPNET MVC,但你也可以用網絡的形式使用。開始真的很容易,有很多很好的例子,最好的部分是沒有回傳。這個工具有自帶的分頁,排序,搜索等

繼承人網頁上運行jQuery的數據表的一個很好的例子,形成http://datatables.extrared.net/Sample/

而且在這裏你可以開始使用jQuery的數據表https://datatables.net/

+1

這可能是最好的解決方案,但它需要重寫整個應用程序。 –