我有一個網頁,它返回一組結果,然後您可以以.csv格式請求這些結果。將文件下載到客戶端PC併發回
由於文件的創建時間相當長(有時長達30分鐘),我添加了一些JavaScript,它將一個類添加到div中,以便它覆蓋屏幕,告訴用戶報告正在創建並保持耐心。
創建並下載文件後,我希望div可以返回到原來的狀態(可以這麼說)。
這是我目前有。
的JavaScript
function skm_LockScreen() {
var lock = document.getElementById('ctl00_ContentPlaceHolder1_skm_LockPane');
var lock2 = document.getElementById('ctl00_ContentPlaceHolder1_pleaseWait');
if (lock)
lock.className = 'LockOn';
if (lock2)
lock2.className = 'WaitingOn';
}
function skm_UnLockScreen() {
var lock = document.getElementById('ctl00_ContentPlaceHolder1_skm_LockPane');
var lock2 = document.getElementById('ctl00_ContentPlaceHolder1_pleaseWait');
if (lock)
lock.className = 'LockOff';
if (lock2)
lock2.className = 'WaitingOff';
}
按鈕
<asp:Button ID="LatestReportButton" runat="server" CssClass="standardButton" Text="Latest Quote Report" Width="140px"
OnClick="ReportButton_Click" CommandArgument="2" OnClientClick="skm_LockScreen()" />
代碼背後
protected void ReportButton_Click(object sender, EventArgs e)
{
Page.ClientScript.RegisterStartupScript(base.GetType(), "unlock", "<script type=\"text/javascript\">skm_UnLockScreen();</script>");
try
{
//Start creating the file
using (StreamWriter sw = new StreamWriter(tempDest + "\\" + csvGuid + ".csv", true))
{
//Code to create the file goes
}
}
catch
{
}
Response.AddHeader("Content-disposition", "attachment; filename=report.csv");
Response.ContentType = "application/octet-stream";
Response.WriteFile("CreatedReport.csv");
Response.End();
}
我遇到的問題是,JavaScript是從來沒有寫回頁面,因爲響應。結束();
我已經做了兩個按鈕,一個用來創建報告,另一個用來下載它,但是我的公司會更喜歡它是一體化的。
有什麼建議嗎?
感謝羅布。我最終在一個新窗口中創建了報告,向用戶表明報告正在創建並耐心等待。該窗口完成後下載文件。 –