ASP.NET AJAX 中 UpdateProgress 的瑕疵及其解決方案

來源:互聯網
上載者:User

... 前言

  在Web應用程式中,引入AJAX,不僅可以提高使用者體驗(頁面局部重新整理),而且可以在一定程度上,降低Web伺服器的工作負載和回應時間。

  AJAX 使用Javascript,在用戶端(瀏覽器端),通過Http(s)協議,向伺服器端 (Web Server)發起請求;伺服器根據請求的URI,

完成相應的邏輯操作,爾後將執行的結果通過Http(s)協議,返回給用戶端。

用戶端對擷取的返回結果(TEXT/XML 串),使用Javascript, 在callback 中解析、呈現。

 

... ASP.NET AJAX 伺服器控制項

  在早期的Asp, PHP, Jsp 開發中,AJAX 中,常見到的是XMLHttpRequest 忙碌的身影。

XMLHttpRequest in AJAX

function loadXMLDoc(url) {
    if (window.XMLHttpRequest) {
        req = new XMLHttpRequest();
    } else if (window.ActiveXObject) {
        req = new ActiveXObject("Microsoft.XMLHTTP");
    }
    if (req) {
        req.onreadystatechange = processReqChange;
        req.open("GET", url, true);
        req.send(null);
    }

}

  如今,我們可以更多地選擇JQuery, Ext Js 之類的Javascript 架構,以減少AJAX開發的工作量。

  Asp.NET(3.5及以上, 2.0及以下需安裝Ajax Extension) 提供一套AJAX 伺服器端控制項(其實也就是那麼5個, ScriptManger, ScriptManagerProxy, Timer,  UpdatePanel, UpdateProgress),來簡化AJAX開發。 配合Ajax Control toolkit來使用,確實省事不少。

 

 

... UpdateProgress

 AJAX 伺服器控制項中, UpdatePanel是一個大玩意,頁面請求完成後,你會發現只有處於UpdatePanel 之中的內容才會更新,

而UpdatePanel 之外之物則保持原樣。

 即便如此,在UpdatePanel完成更新之前,比較友好的方式是,提示使用者稍安勿躁,請求正在處理之中。

 

... UpdateProgress的瑕疵

  UpdateProgress 很有用,但也有一點瑕疵。

  下面例子中,使用者點擊"Filter"按鈕, 利用Ajax Toolkit 中的ModalPopupExtender,彈出搜尋條件視窗;

在快顯視窗中,點擊“OK”按鈕提交AJAX請求,而此時,我們的進度條卻沒有在最上層顯示,而且常常是躲在快顯視窗下面看不見。

 

 

... 解決方案

 下面談談我的做法:

方法(一)

   在與ModelPopupExtender 相關聯的Panel裡, 加入一份UpdateProgress的Template 拷貝。如下:

代碼

<div id="divFilteringLoader" runat="server" class="loader" style="display:none;">
            <div class="loaderContent"><asp:Label runat="server" ID="lblLoading" Text="<%$ PPPResources:Main, Loading %>"></asp:Label></div>
        </div>

 

  然後在,使用者點擊"OK"時,用戶端觸發:

$get("<%=divFilteringLoader.ClientID%>").style.display = 'block';

 

方法(二)

  使用者點擊"OK"時,用戶端觸發Cancel按鈕的點擊事件:

$get("<%=btnFilterCancel.ClientID%>").click();

 

 

... 總結

  問題很簡單,解決的方式也很簡單。

  園子裡的朋友們,有遇到相同問題的嗎?

  還望積極貢獻些方法和主意。

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.