Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ajax调用MVC后在新选项卡上显示PDF#_C#_Ajax_Asp.net Mvc_Pdf - Fatal编程技术网

C# ajax调用MVC后在新选项卡上显示PDF#

C# ajax调用MVC后在新选项卡上显示PDF#,c#,ajax,asp.net-mvc,pdf,C#,Ajax,Asp.net Mvc,Pdf,我是C#的新手,我想使用HttpResponseMessage在新选项卡上向web浏览器客户端显示新创建的动态PDF 创建的PDF是有效的。 这是我的控制器代码: [HttpGet] public HttpResponseMessage ShowPDF() { MemoryStream ms = new GetPDF(); Byte[] bytes = ms.GetBuffer(); HttpResponseMessag

我是C#的新手,我想使用HttpResponseMessage在新选项卡上向web浏览器客户端显示新创建的动态PDF

创建的PDF是有效的。 这是我的控制器代码:

    [HttpGet]
    public HttpResponseMessage ShowPDF()
    {

        MemoryStream ms = new GetPDF();
        Byte[] bytes = ms.GetBuffer();

        HttpResponseMessage result = new HttpResponseMessage(HttpStatusCode.OK);
        Response.AppendHeader("Content-Disposition", "inline; filename=test.pdf");

        result.Content = new StreamContent(ms);
        result.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");

        return result;
    }
在点击HTML页面上的按钮后,什么都没有发生,没有错误,但也没有显示新的pdf。我尝试使用MemoryStream或Buffer,但似乎都不起作用

编辑

以下是我的查看代码:

        <button id="GetPDF" class="btn btn-primary pull-right">GET PDF</button>

好吧,我成功了。这是我的解决方案,我明天会优化它

Javascript:

        $('#GetPDF').click(function (e) {
        window.open('@Url.Action("ShowPDF", "Controller")');
    });
控制器方法:

    [HttpGet]
    public ActionResult ShowPDF()
    {
        try
        {
            MemoryStream ms = new MemoryStream(GetPDF().ToArray());
            FileStreamResult filestream = new FileStreamResult(ms, "application/pdf");
            return filestream;
        }
        catch (Exception ex)
        {
            throw new Exception();
        }
    }
GetPDF返回一个MemoryStream,但已关闭。您必须使用ToArray()获取Byte[]元素,然后使用构造函数创建另一个MemoryStream


非常感谢阿德森和梅森的帮助。

什么按钮?您没有显示任何按钮。你试过调试代码吗?确保到达您的操作方法,等等?我已经编辑了我的帖子,是的,正在调用我的操作方法。没有发生任何事情,至少部分是因为您没有对ajax调用的结果做任何事情。除非您在示例中遗漏了“success”回调的内容?调用您的action方法很好,所以您是否检查了响应中是否确实返回了内容?是的,返回了内容(在ajax函数中的数据中)。它也成功了。我不知道是不是我的方法不起作用,也不知道在ajax成功函数中放入什么来显示数据/PDF(它肯定有内容类型:application/PDF)。这是一个棘手的问题。在您的情况下,您希望将其放在新窗口/选项卡中。因为这里没有URL,只有一些二进制数据,这很棘手。最好放弃ajax,只做一些类似于
window.open('@Url.Action(“ShowPDF”,“Controller”))。别忘了,浏览器不能以本机方式打开PDF文件——这是一个插件功能。Chrome默认包含一个插件,Firefox可能会,但IE和移动浏览器通常不会。因此,如果没有插件,你无论如何也不能在浏览器中“显示”你的PDF,用户只会得到一个下载提示。
    [HttpGet]
    public ActionResult ShowPDF()
    {
        try
        {
            MemoryStream ms = new MemoryStream(GetPDF().ToArray());
            FileStreamResult filestream = new FileStreamResult(ms, "application/pdf");
            return filestream;
        }
        catch (Exception ex)
        {
            throw new Exception();
        }
    }