在 iframe 中显示 aspx 并且 aspx 正在显示 pdf
Posted
技术标签:
【中文标题】在 iframe 中显示 aspx 并且 aspx 正在显示 pdf【英文标题】:display aspx in iframe and aspx is displaying pdf 【发布时间】:2014-02-28 08:56:22 【问题描述】:我使用 iframe 显示 aspx 页面如下
<a href="#" id="trigger">this link</a>
<div id="dialog" style="display:none">
<div>
<iframe frameborder="0" src="Displaypdf.aspx"></iframe>
</div>
</div>
在 Displaypdf.aspx.cs 中,我正在显示一个 pdf,如下所示。我在 aspx 中有一个按钮,单击该按钮会显示 pdf(在现在是 iframe 的 aspx 页面中)
protected void Button1_Click(object sender, EventArgs e)
string FilePath = Server.MapPath("sample.pdf");
WebClient User = new WebClient();
Byte[] FileBuffer = User.DownloadData(FilePath);
if (FileBuffer != null)
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", FileBuffer.Length.ToString());
Response.BinaryWrite(FileBuffer);
这很好用。现在我想在 Page_Load 做同样的事情 但是当我将此代码放入页面加载时,这不起作用。
protected void Page_LOad(object sender, EventArgs e)
string FilePath = Server.MapPath("sample.pdf");
WebClient User = new WebClient();
Byte[] FileBuffer = User.DownloadData(FilePath);
if (FileBuffer != null)
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", FileBuffer.Length.ToString());
Response.BinaryWrite(FileBuffer);
发生的情况是,我单击并获取我的 iframe,但 iframe 是空白的,因为第一次我的 pdf 没有被渲染。谁能告诉我如何解决这个问题。
【问题讨论】:
您有任何错误吗?或者您是否尝试在页面加载开始时添加断点?我注意到你在第一行有一个语法错误,应该是 protected void Page_Load 没有语法错误:)。是打字错误。基本上,问题是当我将它添加到页面加载时,iframe 是空白的 【参考方案1】:我已经尝试过您的代码,但我认为您缺少一些使其正常工作的东西。我在下面提供了您的代码的编辑版本,应该可以正常工作。
iframe 页面(aspx):
<head>
<script src="../../Scripts/jquery-1.9.1.min.js"></script>
<script src="../../Scripts/jquery-ui.js"></script>
<script type="text/javascript">
var $dial1 = ""
function openlink(url, title, width, height)
$dial1 = $('<div></div>')
.html('<iframe id="frame1" style="border: 0px; " src="' + url + '" ></iframe>')
.dialog(
autoOpen: false,
modal: true,
height: height,
width: width,
title: title
);
$dial1.dialog('open');
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="This Link" OnClientClick="openlink('Displaypdf.aspx', 'Open', '1000', '470'); return true;" OnClick="Button1_Click" />
</form>
</body>
显示pdf.aspx.cs:
protected void Page_Load(object sender, EventArgs e)
string FilePath = Server.MapPath("sample.pdf");
WebClient User = new WebClient();
Byte[] FileBuffer = User.DownloadData(FilePath);
if (FileBuffer != null)
Response.ContentType = "application/pdf";
Response.AddHeader("content-length", FileBuffer.Length.ToString());
Response.BinaryWrite(FileBuffer);
希望这会有所帮助...
【讨论】:
哦,如果您需要 iframe 中的按钮,请将其添加到 Displaypdf.aspx 并双击以创建事件处理程序。然后从页面加载中获取代码并将其放入按钮单击事件中。 感谢 connersz 提供代码。它工作正常,但我希望 iframe 弹出一个对话框,而不是在同一页面中,我该怎么做? @user2256404 我已更改为代码。弹出窗口现在将在 jQuery 对话框中打开,该对话框是单击按钮时的模式窗口。当对话框加载时,它将显示 PDF 页面,该页面在加载时应该执行所需的操作。请注意:您需要将两个 jquery 引用更改为您自己的副本,或者使用 jQuery 或 Google 的托管版本。我没有更改代码,因此您可能需要稍作修改,但应该非常接近。 谢谢@connersz,但是还有一件事,现在由于 iframe id 在 jquery 函数中,我不能在 .cs 文件中使用它。 @user2256404 我认为您在 .cs 文件中不需要它。该按钮将在 jquery 模态窗口内创建一个动态 iframe。 iframe 的 URL 将是 Displaypdf.aspx 屏幕,当它加载该页面时,将点击 Page_Load 事件处理程序,该处理程序加载 PDF 详细信息,然后将显示在模式窗口中。如果您将按钮 onclientclick 内的返回更改为“返回 false;”它将执行所需的操作,无需回发,也无需在 iframe 页面上运行任何代码。以上是关于在 iframe 中显示 aspx 并且 aspx 正在显示 pdf的主要内容,如果未能解决你的问题,请参考以下文章
带有 iframe 的 .aspx 页面中的 ASPX 页面引发 500.23 错误
在 login.aspx 之外的 iframe 中关闭登录控件