iT邦幫忙

0

[C# ASP.Net Core]想在Controller回應時以新視窗顯示PDF

kod 2022-03-30 09:01:211973 瀏覽
  • 分享至 

  • xImage

目前用以下程式碼可以使PDF取代當前頁面直接顯示。
但希望可以開啟新的分頁或是視窗來顯示,而不會使原本的頁面被取代。
想請問是否有什麼方法可以達成以上效果。

Controller:

public IActionResult ShowPdf()
{
//...取得PDF的Byte陣列byteArr
Response.Headers.Add("Content-Disposition", "inline:filename=" + filename);
return File( byteArr , "application/pdf");
}

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
0
天黑
iT邦研究生 5 級 ‧ 2022-03-30 09:06:06
最佳解答

後端呼叫js作法,可以試試看

        public IActionResult Test()
        {
            return new JavaScriptResult("<script language='javascript' type='text/javascript'>window.open('https://ithelp.ithome.com.tw/');</script>");
        }

        public class JavaScriptResult : ContentResult
        {
            public JavaScriptResult(string script)
            {
                this.Content = script;
                this.ContentType = "text/html";
            }
        }
看更多先前的回應...收起先前的回應...
kod iT邦新手 5 級 ‧ 2022-03-30 09:15:00 檢舉

感謝你的回答!
但目前畫面上可能沒辦法做變更,所以希望能找到從Controller return之後能開新頁面來顯示的方法。

天黑 iT邦研究生 5 級 ‧ 2022-03-30 11:09:46 檢舉

我更新答案了 可以測試看看

kod iT邦新手 5 級 ‧ 2022-03-30 12:20:59 檢舉

謝謝你的回覆!
但這邊嘗試過後會變成在原頁面顯示window.open('...輸入內容')
我再嘗試看看是哪裡出問題了...

天黑 iT邦研究生 5 級 ‧ 2022-03-30 14:15:59 檢舉

ContentType 要調整...我更新了core挺麻煩的...

Homura iT邦高手 1 級 ‧ 2022-03-30 15:18:52 檢舉

就叫前端調就好了
搞得這麼麻煩@@

天黑 iT邦研究生 5 級 ‧ 2022-03-30 16:03:31 檢舉

哈哈 沒關係 讓我知道core缺了不少以前framework有的東西,當作學習就好

kod iT邦新手 5 級 ‧ 2022-03-30 17:16:35 檢舉

謝謝各位的回答,
這邊試著能不能從Controller調用Js直接開啟一個新頁面來顯示PDF...因為是Byte[]類別不知道能不能順利開啟

天黑 iT邦研究生 5 級 ‧ 2022-03-30 17:42:25 檢舉

我給的連結,換成你的檔案的Action的url就可以了

kod iT邦新手 5 級 ‧ 2022-03-31 10:49:00 檢舉

謝謝你的幫忙,這樣的確可以在新分頁打開Url了!
另外想問一下這樣原分頁有辦法保持原本的樣子嗎?因為打開後原分頁執行window.open變為空白頁的模樣。

天黑 iT邦研究生 5 級 ‧ 2022-03-31 12:00:56 檢舉

感覺要做到這程度就要包含原本的View再加上script全都要一起回傳回去,畢竟是server side...

0
simon
iT邦新手 5 級 ‧ 2022-03-30 11:16:34

Controller好像沒辦法開啟新視窗欸,用HTML或js來達成目的也最簡單

RAZOR寫法
@Html.ActionLink("linkText", "Action", new {controller="ShowPdf"}, new {target="_blank"})

kod iT邦新手 5 級 ‧ 2022-03-30 12:22:00 檢舉

謝謝你的回覆!
因為目前沒有辦法動到view的部分,js的話或許可以開新的嘗試看看。

0

一般來說。想要利用 Header 來開新頁面是辦不到的事。

典型的做法大多是從VIEW上就呼叫開新頁處理。
如果要從後端來處理開新頁。一般只能送JS給瀏覽器運行要開新頁。
這並不是後端來開新頁,而是後端輸出開新頁的前端語言。讓瀏覽器去開新頁處理。

畢竟 Header 並不存在所謂開新頁的參數及控制的方式。

kod iT邦新手 5 級 ‧ 2022-03-30 17:17:25 檢舉

謝謝你的回覆!
原來如此...看來只能嘗試能不能從Controller調用Js直接開啟一個新頁面來顯示PDF...因為是Byte[]類別不知道能不能順利開啟

正常不會在讀取PDF這個程式下手的。

是要在準備讀取PDF這邊下手的。
這樣就會開新頁時去跑讀取的動作然後直接顯示。

我要發表回答

立即登入回答