2009-04-28 22 views
5

我有一個應用程序內的Excel電子表格的導入功能。它目前使用FileUpload控件。我上傳文件,然後在該文件上運行一個操作。我想通知用戶正在完成的操作以及完成的百分比。我想我可以從Excel電子表格中提取總行數,並在將每條記錄插入數據庫並更新進度條時不斷分開。ASP.NET AJAX進度條:代碼隱藏的更新?

問題是,我似乎無法找到任何解決方案,從代碼隱藏更新進度條。我嘗試使用Matt Berseth's solution

看起來非常好,但是我看不到它是從代碼隱藏中工作的。理論上,我認爲將一個值放入頁面上的文本框中,並將onchange設置爲JavaScript函數來設置百分比可以作爲測試,但即使這樣也沒有給出我想要的結果。

有關如何做到這一點的任何建議?

回答

1

您應該知道的是,您無法使用標準FileUpload控件檢查文件上載的狀態。你可以做的是將文件上傳到服務器上,然後使用ODBC連接到它,並開始讀取並在數據庫中異步插入行(通過向頁面發出ajax請求或使用腳本服務)。

就進度條而言,您應該簡單地使用CSS progres欄(您可以在http://css-tricks.com/examples/ProgressBars/找到一個簡單示例)。

然後,你應該建立一個腳本服務(使用網絡serivice)用方法,可以從服務器返回的進展情況:

你的* .asmx文件應該包含這樣的:

[WebMethod] 
public int GetStatus() 
    { 
     int progress = 0; // in percents 
     // your server-side code here 
     return progress; 
    } 

你的aspx頁面應該包含這樣的:

<asp:ScriptManager runat="server" ID="ScriptManager"> 
<Services> 
    <asp:ServiceReference Path="~/services/import.asmx" InlineScript="false" /> 
</Services> 
</asp:ScriptManager> 

然後,你應該能夠定期調用該方法從JavaScript(每一秒的examp嘞,使用的setTimeout),並用簡單的JavaScript或jQuery的更新進度條寬度:

var tout, service; 

function UpdateStatus() { 
    if (tout != null) 
     clearTimeout(tout); 

    if (service == null) 
     service = new namespace.here.serice_class_here(); 

    service.GetStatus(onSuccess, onFailure);  
} 

function onSuccess(result) { 
    // update the width of the progress with result (the integer value of the progress) 
    progress_bar.style.width = percent + "%";   

    // call the method again 
    tout = setTimeout("UpdateStatus()", 1000); 
} 

function onFailure(error) { 
    alert(error.get_message()); 
} 

你可以擴展您的onSuccess JavaScript函數和進度完成時(返回值爲100%),你可以將用戶重定向到另一個頁面或根據您的需要顯示信息或按鈕。

我希望這有助於!