ASP.NET如何在新标签页打开生成的PDF响应?
解决方案
核心思路是让生成PDF的请求在新标签页中发起,而非在当前页面的PostBack流程里直接输出PDF。无需重写视图,只需调整前端控件触发方式和后端事件绑定即可:
步骤1:修改触发控件的提交目标
找到触发PDF生成的控件(比如按钮),添加OnClientClick属性,让表单提交到新标签页:
<asp:Button ID="btnGeneratePDF" runat="server" Text="生成并打开PDF" OnClick="btnGeneratePDF_Click" OnClientClick="this.form.target='_blank';" />
步骤2:迁移PDF生成逻辑到控件点击事件
把原Page_Load中的调用代码,移到按钮的Click事件处理方法中,同时添加代码恢复表单默认目标(避免后续其他操作也在新标签页打开):
protected void btnGeneratePDF_Click(object sender, EventArgs e) { // 替换成你实际获取html内容的逻辑 string htmlContent = eventArgument; // 调用PDF生成方法 PdfSharpConvert(htmlContent, Response); // 恢复表单默认提交目标,不影响后续操作 ClientScript.RegisterStartupScript(this.GetType(), "resetFormTarget", "this.form.target='_self';", true); }
步骤3:保留原PDF生成方法不变
你的PdfSharpConvert方法无需修改,它依然负责将生成的PDF输出到响应流,只是现在这个响应会被新标签页接收并展示。
关于response.Redirect的说明
response.Redirect需要指向具体的URL,而你的PDF是动态生成的内存流,没有对应的静态文件路径。如果用Redirect,你需要先把PDF保存到服务器磁盘再跳转至该文件地址,反而增加复杂度,不如直接在新标签页发起请求输出简便。
内容的提问来源于stack exchange,提问作者Iván Flores Vázquez
相关产品推荐
相关产品推荐

