在 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 页面?

带有 iframe 的 .aspx 页面中的 ASPX 页面引发 500.23 错误

是否可以使用 <iframe> 指向 .aspx 页面?

在 login.aspx 之外的 iframe 中关闭登录控件

使用模态弹出窗口在另一个 aspx 页面中显示 aspx 页面

asp.net c#向html内传值问题,高手请来