台灣最大程式設計社群網站
線上人數
1055
 
會員總數:243462
討論主題:188180
歡迎您免費加入會員
討論區列表 >> ASP.NET >> 為什麼於page_load自動下載檔案後,畫面會一片空白
[]  
[我要回覆]
1
回應主題 加入我的關注話題 檢舉此篇討論 將提問者加入個人黑名單
為什麼於page_load自動下載檔案後,畫面會一片空白
價值 : 100 QP  點閱數:473 回應數:9

樓主

kitty
門外漢
0 13
276 29
發送站內信

請教各位:

我於page_load內,自動產生一個test.xls檔案,並自動下載該檔案.....執行時,有正常產生test.xls,也有自動下載

問題是,當它執行完成後,畫面卻是一片空白,.........畫面上應該還有一些按鈕,及執行完成的訊息,卻都沒看到

請問是那邊有問題?

我的環境: win7 , VS2017




搜尋相關Tags的文章: [ pageload ] , [ 下載 ] ,
本篇文章發表於2018-02-04 11:01
別忘捐VP感謝幫助你的人 新手會員瞧一瞧
1樓
回應

小魚
檢舉此回應
Response.Clear() 把它們清掉了吧...
本篇文章回覆於2018-02-04 11:17
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
2樓
回應

小魚
檢舉此回應
太久沒碰.Net,現在都寫MVC
剛剛試了一下,
Clear只會清除Buffer的內容
但是以下四行

顯示出來的就會是空白
拿掉最後一行,
看到的是網頁的原始碼...
本篇文章回覆於2018-02-04 11:29
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
3樓
作者回應

kitty
檢舉此回應
我試過只留下面二列程式碼,畫面還是一樣,都是空白


本篇文章回覆於2018-02-05 11:27
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
4樓
回應

topcat
捐贈 VP 給 topcat 檢舉此回應
您這樣的寫法
似乎是把畫面的輸出,透過

轉成輸出為副檔名為xls的檔案

也就是,把畫面的輸出變成檔案,並指定檔名為test.xls

---
小喵請您坐個實驗,請您把輸出的『test.xls』,用記事本開啟,看看其內容是否為html的tag
如果是的話,不是畫面白白的,而是畫面的內容,變成了『test.xls』檔案了

其實,這不是產生真正的xls
因此,當用Excel開啟這檔案的時候,會有個訊息警告,該檔案非真的xls,是否要開啟(類似這樣)的訊息


如果您想產出真正的xls或者xlsx
建議使用一些專用的元件(例如:NPOI Library)
https://dotblogs.com.tw/topcat/2016/08/21/173720

檔案不但小很多,而且還可以是真正的xlsx的檔案

^_^
本篇文章回覆於2018-02-05 11:37
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
5樓
作者回應

kitty
檢舉此回應
謝謝 小魚 和 topcat

我是轉出真正的 Excel 檔案

程式碼大略如下:


本篇文章回覆於2018-02-05 12:12
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
6樓
不錯的參考

topcat
捐贈 VP 給 topcat 檢舉此回應


您的程式碼中有幾句幫您註解上去
為何要寫這幾句?

https://msdn.microsoft.com/zh-tw/library/system.web.httpresponse.suppresscontent(v=vs.110).aspx
https://msdn.microsoft.com/zh-tw/library/windows/desktop/system.web.httpresponse.suppresscontent(v=vs.80).aspx/html

有個建議
或許可以把處理與輸出xls的部分,寫在另一個aspx,然後用另開視窗的方式,執行該aspx
^.^a
本篇文章回覆於2018-02-05 13:23
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
7樓
最有價值解答

小羊窒息
捐贈 VP 給 小羊窒息 檢舉此回應
你的狀況沒有任何問題,

[下載] vs [顯示資料] 是完全不一樣的2件事,

下載時顯示小視窗進行下載
顯示資料時由瀏覽器主畫面來顯示資料
====================
一般在看到網站畫面後,點擊連結下載資料,是先看到網頁資料,然後點擊下載時,畫面是靜止的,由瀏覽器彈出小視窗來負責下載

當你在page_load直接輸出檔案資料時,瀏覽器就是直接下載資料
(當然就不會有所謂的:下載之後要再顯示畫面這件事,因為全都在下載的資料中了.....)

====================


一般國外網站對於你的需求的做法都是先顯示畫面【例如:你的下載資料已經準備開始,數秒後會自動開始下載】
然後在html當中加入javascript去點擊下載連結,好比jquery的 $('#downlink').trigger('click');
並再搭配額外的文字說明【如果下載沒有自動開始,請點擊下方連結,開始下載】

藉此達成【畫面顯示】+【檔案下載】
本篇文章回覆於2018-02-05 13:25
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
8樓
作者回應

kitty
檢舉此回應
謝謝 topcat ,那段程式碼,就網路搜尋到,沒想太多,照抄而已,謝謝你加上了註解,又多學了

謝謝 小羊窒息和topcat ,就先依照你們的建議,把轉檔和下載分開處理了

本篇文章回覆於2018-02-05 15:22
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
9樓
回應

小羊窒息
捐贈 VP 給 小羊窒息 檢舉此回應
這幾個網址給你參考

=============
2015年針對相同問題的討論(下載檔案後,如何顯示已下載完成)
https://www.blueshop.com.tw/board/FUM20041006161839LRJ/BRD20150717011510ZRL.html

=============

當時的解法 jQuery File Download(現在應該也適用)
https://stackoverflow.com/questions/4545311/download-a-file-by-jquery-ajax
http://samchu.logdown.com/posts/430528-easy-use-jquery-filedownload

=============


簡單來說就是一開始的頁面顯示:【資料已開始下載】,

而頁面的javaScript就是讓jquery 的fileDownload直接下載你的指定連結。。。

這樣子就可以在真正下載完畢後顯示【下載完成】(要是下載失敗也可以顯示:下載未成功)

本篇文章回覆於2018-02-05 16:10
== 簽名檔 ==
--未登入的會員無法查看對方簽名檔--
   
1

回覆
如要回應,請先登入.