如何从ASP.NET中的代码隐藏文件访问IFRAME?

时间:2020-03-06 15:05:24  来源:igfitidea点击:

我正在尝试从代码隐藏的aspx.cs文件中为IFRAME html控件设置属性。

我碰到过一篇帖子,说我们可以使用FindControl使用以下命令查找非ASP控件:

aspx文件包含:

<iframe id="contentPanel1" runat="server" />

然后代码隐藏文件包含:

protected void Page_Load(object sender, EventArgs e)
{
    HtmlControl contentPanel1 = (HtmlControl)this.FindControl("contentPanel1");
    if (contentPanel1 != null)
        contentPanel1.Attributes["src"] = "http://www.stackoverflow.com";

}

除了找不到控件之外,contentPanel1为null。

更新1

查看呈现的html:

<iframe id="ctl00_ContentPlaceHolder1_contentPanel1"></iframe>

我试图将后面的代码更改为:

HtmlControl contentPanel1 = (HtmlControl)this.FindControl("ctl00_ContentPlaceHolder1_contentPanel1");

if (contentPanel1 != null)
    contentPanel1.Attributes["src"] = "http://www.clis.com";

但这没有帮助。

我正在使用MasterPage。

更新2

将aspx文件更改为:

<iframe id="contentPanel1" name="contentPanel1" runat="server" />

也没有帮助

回答

答案是显而易见的,甚至不值得提出原始问题。如果我们有aspx代码:

<iframe id="contentPanel1" runat="server" />

并想从代码隐藏文件访问iframe,只需访问它即可:

this.contentPanel1.Attributes["src"] = "http://www.stackoverflow.com";

解决方案

尝试在Load事件之外实例化contentPanel1;否则,请执行以下步骤。使它在全球范围内保持领先地位。

尝试使用

this.Master.FindControl(" ContentId")。FindControl(" controlId")

反而。

FindControl方法在执行该方法的"控件"的子控件中查找。尝试递归浏览控件集合。

protected virtual Control FindControlRecursive(Control root, String id)
    {
        if (root.ID == id) { return root; }
        foreach (Control c in root.Controls)
        {
            Control t = FindControlRecursive(c, id);
            if (t != null)
            {
                return t;
            }
        }
        return null;
    }

如果iframe直接位于运行代码的页面上,那么我们应该可以直接引用它:

contentPanel1.Attribute = value;

如果不是(位于子控件或者MasterPage中),则需要对页面的层次结构有一个很好的了解...,或者使用蛮力方法编写递归版本的FindControl()。

试试这个。

ContentPlaceHolder cplHolder =(ContentPlaceHolder)this.CurrentMaster.FindControl(" contentMain");

HtmlControl cpanel =(HtmlControl)cplHolder.FindControl(" contentPanel1");