[英]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正在將控件集成到頁面中,以便它等待,它具有響應所需的一切。
你可以通過多種不同的方式做到這一點:
執行此操作的最佳方法是使用iFrame(或類似的東西),它將指示瀏覽器在主頁面發送后請求控件。
就個人而言,我永遠不會使用iFrame來加載頁面上的內容 - 這更像是一個黑客而不是任何東西加上,iframe ==“糟糕”。
但他們是對的,你將無法做任何你想要的事情。
如果用戶控件沒有任何導致回發的Web控件(或者在回發期間需要訪問任何表單控件),那么在頁面加載和使用后我會使用AJAX在服務器上請求數據javascript以顯示頁面上的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.