簡體   English   中英

允許.ASPX頁面在.ASCX控件完成加載之前顯示?

[英]Allow .ASPX page to display before .ASCX control finishes loading?

我有一個ASP.NET頁面,上面有一個控件(.ascx)。 頁面(.aspx)onload為一些標簽分配一些文本,並將產品ID傳遞給.ascx控件。 .ascx控件onload從.aspx頁面獲取該產品ID並多次訪問數據庫,進行多次計算等 - 基本上需要很長時間才能加載。

因此,當我點擊此.aspx頁面的鏈接時,頁面加載需要7-10秒。 我把它縮小到.ascx控件的計算是罪魁禍首,我盡可能地優化了代碼......但它仍然需要太長時間。

有沒有辦法在控件加載之前加載.aspx頁面? (也許會顯示“正在加載...”動畫?比如在UpdateProgress中使用?)

您可以使用UpdatePanel執行此操作。 這需要一點點詭計,但嘗試這樣的事情:

1)將UserControl放在UpdatePanel

2)在像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) {...
   }
});

這應該做的是導致在頁面加載完成后立即啟動異步回發,這將導致更新面板被刷新。 由於您將其設置為在異步回發時啟用,因此它將自動呈現為第二次。

實現此目的的唯一可能方法是將其設置為單獨的HTTP資源。 目前,.NET正在將控件集成到頁面中,以便它等待,它具有響應所需的一切。

你可以通過多種不同的方式做到這一點:

  • 通過javascript調用的Web服務
  • 包含控件的單獨頁面(並且在iFrame中托管以顯示在同一頁面上)

執行此操作的最佳方法是使用iFrame(或類似的東西),它將指示瀏覽器在主頁面發送后請求控件。

就個人而言,我永遠不會使用iFrame來加載頁面上的內容 - 這更像是一個黑客而不是任何東西加上,iframe ==“糟糕”。

但他們是對的,你將無法做任何你想要的事情。

如果用戶控件沒有任何導致回發的Web控件(或者在回發期間需要訪問任何表單控件),那么在頁面加載和使用后我會使用AJAX在服務器上請求數據javascript以顯示頁面上的內容。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM