在 iframe 中打开一个 asp.net 页面

Posted

技术标签:

【中文标题】在 iframe 中打开一个 asp.net 页面【英文标题】:Open an asp.net Page inside of an iframe 【发布时间】:2014-02-16 00:30:33 【问题描述】:

在我的网站中,我有两个页面...一个是Assistance.aspx,另一个是Help01.aspx 我想要做的是打开iFrame 内的第二页,它位于表格列中,该列属于Assistance.aspx 页面内的表格: 为此,我使用以下代码:

<iframe id="iFrame" runat="server"  class="tablecolumndiv" >

在我后面的代码中我使用:

Protected WithEvents iFrame As System.Web.UI.htmlControls.HtmlGenericControl<br/>
Public frame1 As HtmlControl = CType(Me.FindControl("iFrame"), HtmlControl)

但是当我谈到:

Private Sub button1_Click(sender As Object, e As System.EventArgs) Handles button1.Click
        frame1.Attributes("src") = "/Pages/Support/Asp/Help01.aspx"
End Sub

它给我一个错误:Object reference not set to an instance of an object. 因为Me.FindControl("iFrame") 没有任何价值 当我从元素中删除 runat 时,该错误消除了。 为什么?

* 附加信息 *

出于同样的原因,我也使用以下脚本:

<script type="text/javascript">
    function setPage(frame, pName) 
        document.getElementById(frame).src = pName;
    
</script>

我从后面的代码中调用它:

Private Sub button1_Click(sender As Object, e As System.EventArgs) Handles button1.Click
        Dim myNewAsp As New AspNetSqlProvider
        myNewAsp.InitializeSite(sender, e)
        Dim url As String = "/Pages/Support/Asp/Help01.aspx"
        Dim urlURI As String = HttpContext.Current.Request.Url.AbsoluteUri
        Dim urlPath As String = HttpContext.Current.Request.Url.AbsolutePath
        Dim myServerName As String = Strings.Left(urlURI, urlURI.Length - urlPath.Length)
        root_url = myServerName
        Dim assist As New Assistance
        Dim frameName As String = "iFrame" 'assistiFrame.ID
        iPageLoad(frameName, sender, root_url + url)
End Sub
Public Sub iPageLoad(FrameId As String, sender As Object, msg As String)
        Dim cstype As Type = Me.GetType()
        Dim innerMess As String = msg
        Dim url As String = HttpContext.Current.Request.Url.AbsoluteUri
        Dim script As String = "setPage('" + FrameId + "', '" + innerMess + "')"
        If Not Page.ClientScript.IsStartupScriptRegistered(Me.GetType(), "iPage") Then
            Page.ClientScript.RegisterStartupScript(cstype, "iPage", script, True)
        End If
End Sub

那个脚本也会给我同样的错误。

【问题讨论】:

当您删除 runat=server 标签时,我认为代码本身不起作用?你也关闭 iframe 标记吗? 没有代码运行顺利,我没有关闭iFrame 你试过iFrame.Attributes("src") = "/Pages/Support/Asp/Help01.aspx"吗?直接,不使用 FindControl 这可能是由于 asp.net '改变' id (它这样做,附加父 id 和各种废话)。运行页面并在浏览器中使用 chrome dev tools/firebug 来检查元素并检查 id(或只是查看源)。但是,对于服务器端控件,您不需要使用 FindControl,只需通过 id 引用即可:iFrame.Attributes 是的,我做到了,而且运行得非常好...但是当我在屏幕上看到它会变白两秒或几秒钟,然后给我我需要的结果。 【参考方案1】:

最后我们看到这个问题有两个解决方案,这两个解决方案中的每一个都有自己的结果。 第一个解决方案是像这样声明 iFrame:

Protected WithEvents iFrame As System.Web.UI.HtmlControls.HtmlGenericControl

在 Button_Click 处理程序中,我们使用:

iFrame.Attributes("src") = "/Pages/Support/Asp/Help01.aspx"

在设计视图区域我们使用:

<iframe id="iFrame" runat="server" class="tablecolumndiv" >

此解决方案效果很好,并且产生了极好的结果。 当然,我们在附加信息中描述了另一种解决方案,但需要从设计视图区域的声明中删除runat=”server”。 选择和挑选……。

【讨论】:

以上是关于在 iframe 中打开一个 asp.net 页面的主要内容,如果未能解决你的问题,请参考以下文章

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

在 Asp.net 的 iframe 中显示 PDF 的特定页面

ASP.NET MVC中能否嵌套WEB控件页面使用?

asp.net 一个页面有两个iframe 在代码中可以控制第一个iframe的Attributes["src"] 但是第二个就不好用了

asp.net 如何 刷新并关闭父页面?

如何从 ASP.NET 的白名单中过滤 UrlReferrer?