How can I access an IFRAME from the codebehind fil

2019-01-22 12:49发布

问题:

I am trying to set attributes for an IFRAME html control from the code-behind aspx.cs file.

I came across a post that says you can use FindControl to find the non-asp controls using:

The aspx file contains:

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

and then the code-behind file contains:

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

}

Except that it's not finding the control, contentPanel1 is null.


Update 1

Looking at the rendered html:

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

i tried changing the code-behind to:

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

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

But it didn't help.

i am using a MasterPage.


Update 2

Changing the aspx file to:

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

also didn't help


Answer

The answer is obvious, and unworthy of even asking the original question. If you have the aspx code:

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

and want to access the iframe from the code-behind file, you just access it:

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

回答1:

If the iframe is directly on the page where the code is running, you should be able to reference it directly:


contentPanel1.Attribute = value;

If not (it's in a child control, or the MasterPage), you'll need a good idea of the hierarchy of the page... Or use the brute-force method of writing a recursive version of FindControl().



回答2:

This works for me.

ASPX :

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

I can access the iframe directly via id.

Code Behind :

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


回答3:

Where is your iframe embedded?

Having this code

<body>

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

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

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

I can access with iFrame1.Attributes["src"] just to iFrame1 and not to iFrame2.

Alternatively, you can access to any element in your form with:

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


回答4:

Try using

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

instead.



回答5:

Try instantiating contentPanel1 outside the Load event; keep it global to the class.



回答6:

The FindControl method looks in the child controls of the "control" the method is executed on. Try looking through the control collection recursively.

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


回答7:

Try this.

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

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



回答8:

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

You should them be able to find your iframe using the findcontrol method.

setting clientIDMode to Static prevents you object from being renamed while rendering.



回答9:

None of your suggestions worked for me, here is my solution:

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


回答10:

aspx page

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

Code behind

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

Very simple....