繁体   English   中英

单击按钮,在新窗口或选项卡中打开流式页面

[英]on clicking a button, opening a streamed page in new window or tab

我正在使用 .NET4 MVC3 VS2010。 我们正在使用 ABCpdf 将 html 转换为 pdf 并将其流式传输到浏览器。 问题是我需要找出一种在新窗口或选项卡中打开 pdf 的方法。 我已经阅读了很多关于类似问题的帖子,但在这个特定案例中找不到任何帮助。 单击页面上的按钮(不是链接)后,控制器操作负责从该页面的 html 创建内存流,然后将其转换为 pdf 并将其发送到浏览器。

该页面的视图中的代码: var pdfUrl = String.Format("window.location.href = '{0}';", Html.BuildUrlFromExpressionForAreas(c => c.GeneratePdf(myUrl))); } @(Html.Button("btnPdf", "生成PDF", HtmlButtonType.Button, pdfUrl)))

MyController 操作中的代码: public ActionResult GeneratePdf(string url) Doc pdfDoc = new Doc(); 内部文档ID; MemoryStream outputStream = new MemoryStream();

和一堆其他的pdf转换代码.....然后: byte[] pdfData = pdfDoc.GetData(); outputStream.Write(pdfData, 0, pdfData.Length); outputStream.Position = 0; 返回新的 FileStreamResult(outputStream, "application/pdf"); }

它工作正常,但 pdf 显示在同一窗口/选项卡中。 如何将数据流式传输到浏览器中的新窗口或选项卡? 我是新手,希望得到详细的帮助。 目标属性不适用于这种情况。 我无法将 window.open 工作到按钮的视图代码中,我也不确定这是否可以解决问题。 提前致谢

您可以使用带有target="_blank"属性的普通链接:

@Html.ActionLink(
    "Generate PDF", 
    "GeneratePdf", 
    "MyController", 
    null,  
    new { 
        url = "some url",
        target = "_blank"
    }
)

或者如果你想要一个按钮,你可以使用 javascript:

<input type="button" value="Generate PDF" id="btnPdf" data-pdf-url="@Url.Action("GeneratePdf", "MyController", new { url = "some url" })" />

然后在单独的 javascript 文件中,您可以使用 jQuery 并订阅此按钮的单击事件并打开一个新窗口:

$(function() {
    $('#btnPdf').click(function() {
        // get the url of the data-pdf-url property of the button
        var url = $(this).data('pdf-url');
        window.open(url, 'pdf');
        return false;
    });
});

@Darin Dimitrov,谢谢,该页面缺少参考。 我解决了这个问题,但它的行为很奇怪:我第一次单击按钮时它什么也不做(不会返回控制器中的任何操作。)第二次单击按钮时它会打开一个新选项卡,但是给出一个错误,他的资源不可用,它表明它正在寻找一个名为 undefined 的视图! 如果我忽略这一点并返回原始页面并第三次单击相同的按钮,那么它的行为就像我希望在第一次单击时一样:它会打开一个新选项卡并显示以 pdf 格式流式传输和格式化的原始页面数据,一切正确! 有什么建议? 我真的很感谢你在这方面的帮助。 这是我的 JS 代码:

<script type="text/javascript">
 $(document).ready(function () {
     $("#btnPdf").click(function () {
         var url = $(this).attr("href");
         $(this).attr("href", '@MvcHtmlString.Create(Html.BuildUrlFromExpressionForAreas<MyController>(c => c.GeneratePdf(Request.Url.ToString())))').bind("click",
                function () {
                    var win = window.open(url);
                    win.focus();
                    return false;
                });
     });
   });
 </script> 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM