从回发发送响应到新窗口?

时间:2015-03-11 15:50:23

标签: asp.net vb.net pdf response postback

我的vb asp.net应用程序中的示例

回发

// ... do stuff
Response.Clear()
Response.Buffer = True
Response.ContentType = "application/pdf"
Response.OutputStream.Write(fileData, 0, fileData.Length)
Response.End()

我尝试了多种方式,谷歌并未向我的搜索者提供有关使用脚本document.forms[0].target = "_blank";和其他技术的建议,例如创建单独的aspx页面并将二进制文件存储在会话中,然后在加载功能。

想想也许你们中的一个可以成为我的救恩,提前谢谢

编辑:最近尝试This guys solution但没有成功。

1 个答案:

答案 0 :(得分:3)

它不需要在回发中发生。您可以创建PDF并从通用处理程序(.ashx)提供它。在ASPX页面上,您可以打开一个新窗口,其URL指向.ashx页面,通过查询字符串传递任何必要的参数。下面是C#,但我想你会明白这个想法。

PDFCreator.ashx

<%@ WebHandler Language="C#" Class="Handler" %>

using System;
using System.Web;

public class Handler : IHttpHandler
{
    public void ProcessRequest (HttpContext context)
    {
        context.Response.Clear();
        context.Response.Buffer = true;
        context.Response.ContentType = "application/pdf";
        var fileData = Database.GetFileData(); //this might be where you grab the query string parameters and pass them to your function that returns the PDF stream
        context.Response.OutputStream.Write(fileData, 0, fileData.Length);
        context.Response.End();
    }

    public bool IsReusable
    {
        get {return false;}
    }
}

ASPX页面Javascript

window.open("PDFCreator.ashx", "_blank");
//or
window.open('<%= ResolveClientUrl("~/PDFCreator.ashx") %>', '_blank');

如果您仍希望在使用通用处理程序技术进行回发之后将其发生,请尝试此操作(同样,C#):

ClientScriptManager.RegisterStartupScript(this.GetType(), "openpdf", "window.open('PDFCreator.ashx', '_blank');", true); //You can also use ResolveClientUrl if necessary