MVC json vs. ActionLink

时间:2012-04-07 03:48:18

标签: asp.net-mvc json

编程新手。我正在尝试从MVC打印PDF,如果我使用Action Link,它运行良好,这是我的代码:

  <%= Html.ActionLink("Print","GeneratePdf","Home", new { fc="Test" },null) %>

   public ActionResult GeneratePdf(string fc)
        {
            Document document = new Document();
            MemoryStream workStream = new MemoryStream();
            PdfWriter.GetInstance(document, workStream);
            document.Open();
            document.Add(new iTextSharp.text.Paragraph("\n\n"));
            // need to add the user name
            iTextSharp.text.Paragraph p = new iTextSharp.text.Paragraph("Name: " + fc);
            p.Alignment = 1;
            document.Add(p);

            document.Close();
            byte[] byteInfo = workStream.ToArray();
            SendPdfToBrowser(byteInfo);
            return null;
        }

   public void SendPdfToBrowser(byte[] buf)
        {
            string filename = "Certificate.pdf";

            // Prepare the headers.
            Response.ClearContent();
            Response.ClearHeaders();
            Response.ContentType = "application/pdf";
            Response.AddHeader("Content-Disposition", "attachment; filename=" + filename);

            // Write the PDF data.
            Response.BinaryWrite(buf);

            // Flush the buffer to the browser.
            Response.End();
            Response.Flush();
            Response.Clear();
        }

我需要使用Json,这是代码:

function PrintChart(fc) {

                 var fc = "Test";
                 var url = '<%= Url.Content("~/Home/GeneratePdf") %>';
                 $.post(url, { fc: fc },
            function (content) {
                if (content != null) { 5 }
            }, "json");

 <input type="button" onclick="PrintChart();" value="Print" />

我没有收到任何错误,但它不会生成PDF文件。提前谢谢。

1 个答案:

答案 0 :(得分:0)

您无法使用Ajax下载文件。 jQuery $ .post()期望来自服务器的响应是文本。 要以Ajax方式下载文件,一般方法是使用隐藏的iframe并将iframe的src设置为文件的URL

<iframe id="hiddenFrame" src="" style="display:none; visibility:hidden;"></iframe>

在PrintChart()中创建包含数据作为查询字符串的URL并设置iframe的src:

 function PrintChart(fc) {

    var fc = "Test";
    var url = '<%= Url.Content("~/Home/GeneratePdf") %>';
    url += "?fc="+fc;

    $('#hiddenFrame').attr('src', url);
}