目前用以下程式碼可以使PDF取代當前頁面直接顯示。
但希望可以開啟新的分頁或是視窗來顯示,而不會使原本的頁面被取代。
想請問是否有什麼方法可以達成以上效果。
Controller:
public IActionResult ShowPdf()
{
//...取得PDF的Byte陣列byteArr
Response.Headers.Add("Content-Disposition", "inline:filename=" + filename);
return File( byteArr , "application/pdf");
}
後端呼叫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";
}
}
感謝你的回答!
但目前畫面上可能沒辦法做變更,所以希望能找到從Controller return之後能開新頁面來顯示的方法。
我更新答案了 可以測試看看
謝謝你的回覆!
但這邊嘗試過後會變成在原頁面顯示window.open('...輸入內容')
我再嘗試看看是哪裡出問題了...
ContentType 要調整...我更新了core挺麻煩的...
就叫前端調就好了
搞得這麼麻煩@@
哈哈 沒關係 讓我知道core缺了不少以前framework有的東西,當作學習就好
謝謝各位的回答,
這邊試著能不能從Controller調用Js直接開啟一個新頁面來顯示PDF...因為是Byte[]類別不知道能不能順利開啟
Controller好像沒辦法開啟新視窗欸,用HTML或js來達成目的也最簡單
RAZOR寫法
@Html.ActionLink("linkText", "Action", new {controller="ShowPdf"}, new {target="_blank"})
一般來說。想要利用 Header 來開新頁面是辦不到的事。
典型的做法大多是從VIEW上就呼叫開新頁處理。
如果要從後端來處理開新頁。一般只能送JS給瀏覽器運行要開新頁。
這並不是後端來開新頁,而是後端輸出開新頁的前端語言。讓瀏覽器去開新頁處理。
畢竟 Header 並不存在所謂開新頁的參數及控制的方式。