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

时间:2008-10-03 18:31:54

标签: asp.net iframe

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

我遇到一个post,说你可以使用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为空。


更新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";

10 个答案:

答案 0 :(得分:12)

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


contentPanel1.Attribute = value;

如果不是(它在子控件或MasterPage中),您需要对页面的层次结构有一个好主意...或者使用强制方法编写FindControl()的递归版本。

答案 1 :(得分:12)

这对我有用。

ASPX:

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

我可以通过ID直接访问iframe。

代码背后:

ContentIframe.Attributes["src"] = "stackoverflow.com";

答案 2 :(得分:1)

尝试使用

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

代替。

答案 3 :(得分:1)

您的iframe嵌入在哪里?

拥有此代码

<body>

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

<form id="form1" runat="server">

<div>
      <iframe id="iFrame2" runat="server"></iframe>
</div>
</form>

我只能使用iFrame1.Attributes["src"]访问iFrame1,而不能访问iFrame2。

或者,您可以使用以下方式访问表单中的任何元素:

FindControl("iFrame2") as System.Web.UI.HtmlControls.HtmlGenericControl

答案 4 :(得分:0)

尝试在Load事件之外实例化contentPanel1;让它在全球范围内保持全球化。

答案 5 :(得分:0)

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;
    }

答案 6 :(得分:0)

试试这个。

ContentPlaceHolder cplHolder =(ContentPlaceHolder)this.CurrentMaster.FindControl(“contentMain”);

HtmlControl cpanel =(HtmlControl)cplHolder.FindControl(“contentPanel1”);

答案 7 :(得分:0)

<iframe id="yourIframe" clientIDMode="static" runat="server"></iframe>

你应该能够使用findcontrol方法找到你的iframe。

clientIDMode设置为Static会阻止您在渲染时重命名对象。

答案 8 :(得分:0)

您的建议都不适合我,这是我的解决方案:

add src="<%=_frame1%>" //to the iframe id="frame1" html control
public string _frame1 = "http://www.google.com";

答案 9 :(得分:0)

aspx页面

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

背后的代码

this.fblikes.Attributes [&#34; src&#34;] =&#34; /productdetails/fblike.ashx" ;;

非常简单....