Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/451.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
Javascript 单击按钮,在新窗口或选项卡中打开流式页面_Javascript_Asp.net Mvc 3 - Fatal编程技术网

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

Javascript 单击按钮,在新窗口或选项卡中打开流式页面,javascript,asp.net-mvc-3,Javascript,Asp.net Mvc 3,我正在使用.NET4 MVC3 VS2010。我们正在使用ABCpdf将html转换为pdf,并将其传输到浏览器。问题是,我需要找到一种方法,在新窗口或选项卡中打开pdf。我已经读了很多关于类似问题的帖子,但在这个具体案例中找不到任何帮助。 单击页面上的按钮(而不是链接)后,控制器操作将负责从该页面的html创建内存流,然后将其转换为pdf并发送到浏览器 该页面视图中的代码: var pdfUrl=String.Format(“window.location.href='{0}';”,Html.

我正在使用.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(字符串url) 单据pdfDoc=新单据(); int-docId; MemoryStream outputStream=新的MemoryStream()

还有一堆用于pdf转换的其他代码。。。。。然后: 字节[]pdfData=pdfDoc.GetData(); 写入(pdfData,0,pdfData.Length); outputStream.Position=0; 返回新的FileStreamResult(outputStream,“application/pdf”); }

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

您可以使用带有
target=“\u 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" })" />

@达林·迪米特洛夫,谢谢,这一页缺少参考资料。我修复了这个问题,但它的行为很奇怪:第一次单击按钮时,它什么也不做(不返回控制器中的任何操作)。第二次单击按钮时,它会打开一个新选项卡,但会出现一个错误,即资源不可用,并显示它正在查找一个名为“未定义”的视图!如果我忽略了这一点,并返回到原始页面,第三次单击同一按钮,那么它的行为将与我在第一次单击时希望的一样:它将打开一个新选项卡,并以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> 

$(文档).ready(函数(){
$(“#btnPdf”)。单击(函数(){
var url=$(this.attr(“href”);
$(this.attr(“href”,“@MvcHtmlString.Create(Html.BuildUrlFromExpressionForAreas(c=>c.GeneratePdf(Request.Url.ToString())))))))。绑定(“单击”,
函数(){
var win=window.open(url);
win.focus();
返回false;
});
});
});

感谢您的快速回复。我编写的代码与您的第二个建议类似,但是使用Firebug,我得到“$is not defined”@FZF,这是jquery。它包含在您的页面中吗?它包含在母版页中。我将进一步检查。@FZF,是的,通常默认的ASP.NET MVC 3项目模板在
\u Layout.cshtml
中包含jQuery。另外,请确保包含此脚本的
.js
文件包含在jQuery之后。@Darin Dimitrov,我失去了对原始配置文件的访问权限,我不得不像回复一样发布我的评论。对不起大家,上面的答案并不是真正的答案,而是第一个答案下面评论的后续问题@Darin Dimitrov,当我返回到原始页面并继续单击时,代码实际上表现得非常奇怪:第一次单击没有发生任何事情,第二次单击我得到一个错误的新窗口,第三次单击它会打开一个错误的新窗口,还有一个正确的pdf流到浏览器,第四次单击打开一个有错误的新胜利和两个有pdf输出的新胜利,第五次单击显示一个新错误胜利和三个有pdf输出的新胜利,依此类推。有没有任何迹象表明是什么导致了这种奇怪的行为?
<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>