Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/30.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
Jquery 带参数的ASP.NET MVC AJAX开放式PDF_Jquery_Asp.net_Ajax_Pdf_Pdfsharp - Fatal编程技术网

Jquery 带参数的ASP.NET MVC AJAX开放式PDF

Jquery 带参数的ASP.NET MVC AJAX开放式PDF,jquery,asp.net,ajax,pdf,pdfsharp,Jquery,Asp.net,Ajax,Pdf,Pdfsharp,我正在使用ASP.NET MVC,我构建了一个返回PDF文件的控制器。 我使用PDFsharp构建PDF: public ActionResult GenerateReport(string Param) { // Create a new PDF document PdfDocument document = new PdfDocument(); document.Info.Title = "Created with PDFsharp"; // Create

我正在使用ASP.NET MVC,我构建了一个返回PDF文件的控制器。
我使用PDFsharp构建PDF:

public ActionResult GenerateReport(string Param)
{ 
    // Create a new PDF document
    PdfDocument document = new PdfDocument();
    document.Info.Title = "Created with PDFsharp";

    // Create an empty page
    PdfPage page = document.AddPage();

    // Get an XGraphics object for drawing
    XGraphics gfx = XGraphics.FromPdfPage(page);

    // Create a font
    XFont font = new XFont("Verdana", 20, XFontStyle.BoldItalic);

    // Draw the text
    gfx.DrawString("Hello, World!", font, XBrushes.Black,
    new XRect(0, 0, page.Width, page.Height),
    XStringFormats.Center);

    MemoryStream stream = new MemoryStream();
    document.Save(stream, false);
    byte[] bytes = stream.ToArray();

    return File(bytes, "application/pdf");
}

现在,我的目标是从jQuery发送一个AJAX请求,并在一个新选项卡中打开PDF文件。除此之外,我还想向控制器传递一个参数。

据我所知,通过ajax直接打开文件并不容易

所以我建议另一条路线

当jquery发送ajax以生成pdf时,不要返回文件,而是返回指向文件的链接,您可以在其中打开该链接 就像新标签中的url一样

因此,首先更改操作以返回链接:

public ActionResult GenerateReport(string Param)
{
  // same as before
  ....

  // save your pdf to a file
  File.WriteAllBytes("result.pdf", memoryStream.ToArray());

  // get url to that pdf which can be browsed
  var pdfUrl = "some location which url can browse";

  return Json(new {url = pdfUrl}, JsonBehaviour.AllowGet);
}
然后在jQueryAjax启动的视图中,当返回结果时,只需浏览到该pdf url

$.getJSON( "your GenerateReport url", function( data ) {
    window.open(data.url,'_blank');
}

据我所知,通过ajax直接打开文件并不容易

所以我建议另一条路线

当jquery发送ajax以生成pdf时,不要返回文件,而是返回指向文件的链接,您可以在其中打开该链接 就像新标签中的url一样

因此,首先更改操作以返回链接:

public ActionResult GenerateReport(string Param)
{
  // same as before
  ....

  // save your pdf to a file
  File.WriteAllBytes("result.pdf", memoryStream.ToArray());

  // get url to that pdf which can be browsed
  var pdfUrl = "some location which url can browse";

  return Json(new {url = pdfUrl}, JsonBehaviour.AllowGet);
}
然后在jQueryAjax启动的视图中,当返回结果时,只需浏览到该pdf url

$.getJSON( "your GenerateReport url", function( data ) {
    window.open(data.url,'_blank');
}

C代码中有一个错误。应该是
new{url=pdfUrl}
而不是
new{url:pdfUrl}
@dremerDT很好,谢谢你的反馈。我修改了答案,C代码有错误。应该是
new{url=pdfUrl}
而不是
new{url:pdfUrl}
@dremerDT很好,谢谢你的反馈。我已经修改了答案