gpt4 book ai didi

javascript - ASP .NET 打印 iFrame

转载 作者:行者123 更新时间:2023-11-28 04:15:45 25 4
gpt4 key购买 nike

我有一个 ASP .Net 应用程序,单击按钮时会进行打印。该应用程序使用 iFrame 进行打印。

这是我的标记:

<iframe id="ifPrint" clientidmode="static" runat="server" style="width:100%;height:1px;" />

这是我的 Javascript 函数,它被调用来打印报告:

function PrintReport() {
window.frames["ifPrint"].focus();
window.frames["ifPrint"].print();
}

该按钮位于名为 Search.aspx 的页面中。单击打印按钮时会发生以下情况:

ifPrint.Attributes["src"] = "~/Pages/PrintWeightTicket.aspx?wt=" + sWeightTicket;
ScriptManager.RegisterStartupScript(this, this.GetType(), "PrintWeight", "PrintReport();", true);

如您所见,该按钮应该将源设置为 PrintWeightTicket.aspx 页面并打印该页面的内容。但由于某种原因,当我点击打印时,它会打印当前页面。我在 C# 代码中放置了一个断点,并检查了 ifPrint.Src 的值,并且它已正确设置为 PrintWeightTicket 页面。但由于某种原因,当调用 Javascript 中的函数时,src 并没有生效。

我尝试过的事情:

  1. 我尝试像这样设置 iframe 的源:
    ifprint.Src = "~/Pages/PrintWeightTicket.aspx?wt="+ sWeightTicket;
    那没有做任何事情。
  2. 我添加了这个:
    Response.Redirect("~/Pages/PrintWeightTicket.aspx?wt="+ sWeightTicket, false);
    ScriptManager.RegisterStartupScript 行的正下方。如果我这样做,它就会起作用!但是,我的老板告诉我,我们不希望页面重定向到打印页面。我们希望页面停留在搜索页面,然后弹出打印对话框并打印重定向页面。所以我不得不将其注释掉,但现在它不起作用了。
  3. 我在 SO 上的一篇文章中看到,我可以尝试从 Page_PreRender() 函数调用 ScriptManager.RegisterStartupScript 函数。当我这样做时,我一打开主页就会弹出打印窗口。我不想那样。这实际上根本不起作用,因为我需要输入重量票证 ID 才能打印任何内容。

有人知道为什么 iFrame 的 src 没有设置吗?

谢谢。

附注:
由于某些原因,标记中的 ClientIDMode = "Static" 行需要保留。如果有人认为这是行不通的原因,我会考虑解决这个问题。

编辑1:
经过一些测试,我发现我当前的代码在 Chrome 中运行得很好。但在 IE 中不起作用。

编辑2:
我的 Javascript 文件名为 JS_Scripts.js。我有一个 AJS.JS 和一个 AJS_fx.JS。当我打开开发人员工具并运行 HTTP Watch(网络选项卡下的绿色播放按钮,不确定这是否是它的名字)时,我注意到我的所有三个 javascript 文件和一个 WebResource.axd?... .. 文件正在获取(已中止) 结果。尽管如此,它在 Chrome 中的结果确实是 200。由于某种原因,IE 未完成脚本的执行。

最佳答案

经过一周多的时间,我在键盘上敲打着这个问题,我屈服了,去找我的老板(他聪明得可笑,我有时认为他是乔恩·斯基特,并在这里使用了假身份)。

对于遇到此问题的任何人:

这就是发生这种情况的原因:

ifPrint.Attributes["src"] = "~/Pages/PrintWeightTicket.aspx?wt=" + sWeightTicket;

这一行正确设置了 iFrame 的源属性。我使 iFrame 可见,并看到 iFrame 实际上加载了源中提到的链接。

但是,下一行是这个问题发生的原因。

ScriptManager.RegisterStartupScript(this, this.GetType(), "PrintWeight", "PrintReport();", true);

该行调用 Javascript 中名为 PrintReport() 的函数。此函数执行 ifPrint.Focus()ifPrint.Print()。但问题是,当调用这两行时,iFrame 尚未完成加载。所以 iFrame 中没有任何可打印的内容。因此,iFrame 继续打印它所在的页面。

解决方法如下:

不要使用 ScriptManager.RegisterStartupScript() 来调用 PrintReport() 函数,而是使用以下代码:

ifPrint.Attributs("onLoad") = "PrintReport()";

这将确保 ifPrint.Print() 函数实际打印 iFrame。

谢谢。

关于javascript - ASP .NET 打印 iFrame,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45862239/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com