C# 在MVC4中显示字节[]中的PDF

C# 在MVC4中显示字节[]中的PDF,c#,ajax,asp.net-mvc,pdf,C#,Ajax,Asp.net Mvc,Pdf,我正在使用Grid.MVC显示实体模型中的数据。在单击行时,我获取单元格的值,并使用json/ajax函数将其传递给我的控制器 在我的控制器中,int“ticketnumber”通过得很好。我不明白的是,当我硬编码int时,它正在工作(如果我直接浏览到) 控制器似乎运行得很好,但它没有显示PDF。它只是用ajax脚本将我带回视图中的网格。谢谢你的帮助 编辑-代码: <script> $(function () { pageGrids.

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

在我的控制器中,int“ticketnumber”通过得很好。我不明白的是,当我硬编码int时,它正在工作(如果我直接浏览到)

控制器似乎运行得很好,但它没有显示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>

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


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

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


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

使用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>

多谢各位

用理查德说的话帮了大忙

我的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);
            }