2012-07-26 31 views
0

我有一個按鈕,它的OnClientClick事件調用Generate()。如何使用Response類創建下載文件,然後與客戶端進行交互?

function Generate() { 
    window.open('GenerateKey.aspx', '_newtab', 'titlebar = no', false); 
    PageMethods.SendKey(SendKeyCallback, SendKeyCallbackError); 
} 

的回調函數隱藏加載GIF,並提醒狀態(成功/失敗)

GenerateKey.aspx創建一個文件,並打開一個下載彈出。

這是在Page_Load代碼:

string keyFileName = orgName + "-" + timeStamp + ".ckey"; 
    fs = new FileStream(Server.MapPath("~/License/Generate/" + keyFileName), FileMode.Create, FileAccess.ReadWrite); 
    sw = new StreamWriter(fs); 
    sw.Write(generatedKey); 
    sw.Flush(); 
    fs.Close(); 
    Response.ContentType = "text/xml"; 
    Response.AppendHeader("Content-Disposition", "attachment; filename=" + keyFileName); 
    Response.TransmitFile(Server.MapPath("~/License/Generate/" + keyFileName)); 
    Response.End(); 

的代碼工作正常,但我的問題是,下載彈出到屏幕上(我想這是因爲Response對象後的新標籤關閉),它看起來像一個錯誤。

我彈出一個新的空白標籤1秒,然後關閉。

任何人都有一個想法如何讓它看起來更好? 我不能在同一頁上這樣做,因爲文件生成之後我再也沒有連接到客戶端(這就是爲什麼我使用window.open)。

+0

@PhaDaPhunk謝謝! – Inbal 2012-07-26 15:03:48

回答

0

您要求瀏覽器在另一個窗口中打開文本文件。瀏覽器可能將數據解釋爲不是HTML,將文件存儲到磁盤,然後關閉窗口 - 這對瀏覽器來說是相當標準的。如果這不是你想要的,你需要發送HTML數據到瀏覽器或配置瀏覽器不要自動將這種類型的數據保存到磁盤。