看板 C_Sharp 關於我們 聯絡資訊
各位好 我用類似下面的語法下載一個檔案 接著再用 RegisterStartupScript 註冊一段 javascript 如下 // 這裡是下載的部分 string FileName = "XXX.xlsx"; MemoryStream ms = new MemoryStream(); // ... 這裡做一些處理 讓ms取得檔案資料 Byte[] bytes = ms.ToArray(); Response.AddHeader("Content-Disposition", "attachment; filename=\"" + FileName + "\";"); Response.BinaryWrite(bytes); Response.Flush(); Response.End(); // 隨後註冊一段javascript Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "AA", "alert('BB');", true); ------------------------------------------ 我發現 註冊javascript那一段 不會work 但是 如果把下載那部分的程式碼mark起來 註冊javascript那一段 是會work的 如果把javascript那一段mark起來 也是可以正常下載 想請問 要怎麼改才能讓下載和javascript那一段 都可以work? 謝謝 ----------------------------------------- 後來 我設中斷點觀察 發現 Response.End(); 之後的程式碼好像都沒執行 所以 我把 Response.End(); 移到最後 像底下這樣 // 這裡是下載的部分 string FileName = "XXX.xlsx"; MemoryStream ms = new MemoryStream(); // ... 這裡做一些處理 讓ms取得檔案資料 Byte[] bytes = ms.ToArray(); Response.AddHeader("Content-Disposition", "attachment; filename=\"" + FileName + "\";"); Response.BinaryWrite(bytes); Response.Flush(); // 隨後註冊一段javascript Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "AA", "alert('BB');", true); Response.End(); --------------------------------------------------------- 接著 我設中斷點觀察 所有的程式碼都順利執行 檔案也順利下載 但沒看到alert跳出視窗 不知道是什麼原因? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 223.139.129.78 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_Sharp/M.1682480124.A.B2C.html
kobe8112: 最簡單就是直接設斷點或每行後印文字,看是掛在哪一行呀 04/26 17:34
謝謝 我有設中斷點觀察了 補充如上
poewar: Response.End()發生ThreadAbortException? 04/26 19:21
謝謝 我剛剛google 好像就是這個問題 https://blog.darkthread.net/blog/response-end-alternative/ 我照上面連結改用CompleteRequest 但我怎麼試 還是無法在CompleteRequest的後面註冊一段javascript 我是改成像下面這樣 //將Buffer中的內容送出 HttpContext.Current.Response.Flush(); //忽視之後透過Response.Write輸出的內容 HttpContext.Current.Response.SuppressContent = true; // 這裡改成false也不行 //忽略之後ASP.NET Pipeline的處理步驟,直接跳關到EndRequest HttpContext.Current.ApplicationInstance.CompleteRequest(); // 隨後註冊一段javascript Page.ClientScript.RegisterStartupScript(this.Page.GetType(), "AA", "alert('BB');", true);
poewar: Page的life cycle被CompleteRequest結束了? 04/29 02:43
不知道 但我試過把 RegisterStartupScript 放在 CompleteRequest() 的前面 也是不行 ※ 編輯: kisha024 (220.142.220.156 臺灣), 04/29/2023 14:09:37