【问题标题】:Displaying PDF from byte[] in MVC 4在 MVC 4 中显示来自 byte[] 的 PDF
【发布时间】:2016-01-19 19:24:10
【问题描述】:

我正在使用 Grid.MVC 来显示来自实体模型的数据。在行单击时,我获取单元格的值并使用 json/ajax 函数将其传递给我的控制器。

在我的控制器中,int "ticketnumber" 通过就好了。我不明白的是,当我对 int 进行硬编码时,它正在工作(如果我直接浏览到 http://localhost:58779/ticket/PDFVIEW)。

控制器似乎运行得很好,但它没有显示 PDF。它只是用 ajax 脚本将我带回到我的视图中的网格。感谢您的帮助。

编辑 - 代码:

   <script>
        $(function () {
            pageGrids.TicketGrid.onRowSelect(function (e) {
                var ticketnumber = e.row.UnsettledID;
                ticketnumber = JSON.stringify({ 'ticketnumber': ticketnumber });
                $.ajax({
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    type: 'POST',
                    url: '/ticket/PDFVIEW',
                    data: ticketnumber,

                });
            });
        });

    </script>

控制器:

[ActionName("PDFVIEW")]
    [HttpGet]
    public ActionResult PDFVIEW(int ticketnumber)
    {

        var db = new ScaleTrac_VerticalEntities();
        Ticket_UnsettledScaleImages tu = new Ticket_UnsettledScaleImages();
        tu = db.Ticket_UnsettledScaleImages.Where(p => p.UnsettledID == ticketnumber).First();
        string filename = "ScaleTick" + tu.UnsettledID + ".pdf";
        {
            byte[] bytes = tu.ScaleTicket;
            TempData["bytes"] = bytes;
            Response.Clear();
            MemoryStream ms = new MemoryStream(bytes);

            return new FileStreamResult(ms, "application/pdf");
        }

    }

【问题讨论】:

  • 请在此处复制并粘贴您的代码,而不是发布屏幕截图。
  • 不在这里,更新你的问题。

标签: c# ajax asp.net-mvc pdf


【解决方案1】:

您不能使用 AJAX 以这种方式下载文件。您的 AJAX 代码正在获取 PDF 的内容,但您的浏览器需要将其作为正常请求接收才能查看。您应该改为呈现指向 PdfView 操作的链接,或者如果您需要从 Javascript 事件处理程序执行此操作,则使用 window.setLocation

请注意,您还需要更改您的操作方法以接受 HttpGet。

【讨论】:

    【解决方案2】:

    使用 Richard 所说的话很有帮助。

    我的 Json 我改成了:

    <script>
        $(function pdfviewer() {
            pageGrids.TicketGrid.onRowSelect(function (e) {
                var ticketnumber = e.row.UnsettledID;
                ticketnumber = JSON.stringify({ 'ticketnumber': ticketnumber });
                $.ajax({
                    contentType: 'application/json; charset=utf-8',
                    dataType: 'json',
                    type: 'POST',
                    url: '/ticket/PDFVIEW',
                    data: ticketnumber,
                    success: function (d) {
                        if (d.success) {
                            window.location = "/Ticket/DownloadFile" + "?fName=" + d.fName;
                        }
                    },
                    error: function () {
                        alert("Error");
                    }
                });
            });
         });     
    </script>
    

    在我的控制器中我做到了:

     [ActionName("PDFVIEW")]
        public ActionResult pdf(int ticketnumber)
        {
    
            var db = new ScaleTrac_VerticalEntities();
            Ticket_UnsettledScaleImages tu = new Ticket_UnsettledScaleImages();
            tu = db.Ticket_UnsettledScaleImages.Where(p => p.UnsettledID == ticketnumber).First();
            string filename = "ScaleTick" + tu.UnsettledID + ".pdf";
            {
                byte[] bytes = tu.ScaleTicket;
                TempData["bytes"] = bytes;
                Response.Clear();
                MemoryStream ms = new MemoryStream(bytes);
                var fName = string.Format("File-{0}.pdf", DateTime.Now.ToString("s"));
                Session[fName] = ms;
                return Json(new { success = true, fName }, JsonRequestBehavior.AllowGet);
            }
        }
    
            public ActionResult DownloadFile(string fName)
                {
                 var ms = Session[fName] as MemoryStream;
                     if (ms == null)
                     return new EmptyResult();
                     Session[fName] = null;
                     return File(ms, "application/pdf", fName);
                }
    

    非常感谢!

    【讨论】:

    • 这很有帮助。
    猜你喜欢
    • 2017-01-22
    • 1970-01-01
    • 2014-02-04
    • 2017-11-21
    • 2014-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-21
    相关资源
    最近更新 更多