schools net iframes externa dinamico change asp asp.net iframe

asp.net - net - iframes



¿Cómo puedo acceder a un IFRAME desde el archivo codebehind en ASP.NET? (10)

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

Encontré una post que dice que puedes usar FindControl para encontrar los controles que no son asp usando:

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 está encontrando el control, contentPanel1 es nulo.

Actualización 1

Mirando el html renderizado:

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

Traté de 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 página maestra.

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 tienes el código aspx:

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

y quiere acceder al iframe desde el archivo de código subyacente, solo tiene que acceder a él:

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


¿Dónde está incrustado tu 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


El método FindControl busca en los controles secundarios del "control" en el que se ejecuta el método. Intente buscar en la colección de control recursivamente.

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


Esto funciona para mí

ASPX:

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

Puedo acceder al iframe directamente a través de id.

Código detrás :

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


Intenta usar

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

en lugar.


Intente crear una instancia de contentPanel1 fuera del evento Load; mantenerlo global para la clase.


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


Prueba esto.

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

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


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

contentPanel1.Attribute = value;

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


página aspx

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

Código detrás

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

Muy simple....


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

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

establecer clientIDMode en Static evita que el objeto se clientIDMode durante la representación.