¿Cómo puedo acceder a un IFRAME desde el archivo de código subyacente en ASP.NET?

StackOverflow https://stackoverflow.com/questions/168236

  •  03-07-2019
  •  | 
  •  

Pregunta

Estoy tratando de establecer atributos para un control html IFRAME desde el archivo aspx.cs de código subyacente.

Me encontré con una publicación que dice que puedes usar FindControl para encontrar los controles que no son asp utilizando:

El archivo aspx contiene:

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

y luego el archivo de código subyacente contiene:

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

}

Excepto que no encuentra el control, contentPanel1 es nulo.


Actualización 1

Mirando el html representado:

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

intenté cambiar el código subyacente a:

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

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

Pero no ayudó.

Estoy usando una MasterPage.


Actualización 2

Cambiar el archivo aspx a:

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

tampoco ayudó


Responder

La respuesta es obvia e indigna de siquiera hacer la pregunta original. Si tiene el código aspx:

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

y desea acceder al iframe desde el archivo de código subyacente, simplemente acceda a él:

<*>
¿Fue útil?

Solución

Si el iframe está directamente en la página donde se está ejecutando el código, debería poder hacer referencia a él directamente:


contentPanel1.Attribute = value;

Si no es así (está en un control secundario o MasterPage), necesitará una buena idea de la jerarquía de la página ... O utilice el método de fuerza bruta para escribir una versión recursiva de FindControl ().

Otros consejos

Esto funciona para mí.

ASPX:

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

Puedo acceder al iframe directamente a través de la identificación.

Código detrás:

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

¿Dónde está incrustado su iframe?

Tener este código

<body>

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

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

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

Puedo acceder con iFrame1.Attributes["src"] solo a iFrame1 y no a iFrame2.

Alternativamente, puede acceder a cualquier elemento en su formulario con:

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

Intenta usar

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

en su lugar.

Pruebe a instanciar contentPanel1 fuera del evento Load; manténgalo global para la clase.

El método FindControl busca en los controles secundarios de " control " El método se ejecuta en. Intenta mirar la colección de control de forma recursiva.

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

Prueba esto.

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

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

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

Debería poder encontrar su iframe utilizando el método findcontrol.

configurar clientIDMode en Static evita que se cambie el nombre de su objeto mientras se procesa.

Ninguna de sus sugerencias funcionó para mí, aquí está mi solución:

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

página aspx

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

Código detrás

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

Muy simple ...

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top