web-dev-qa-db-fra.com

Comment puis-je accéder à un IFRAME à partir du fichier codebehind dans ASP.NET?

J'essaye de définir des attributs pour un contrôle HTML IFRAME à partir du fichier aspx.cs code-behind.

Je suis tombé sur un post qui indique que vous pouvez utiliser FindControl pour rechercher les contrôles non-asp à l'aide de:

Le fichier aspx contient:

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

et ensuite le fichier code-behind contient:

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

}

Sauf que le contrôle n'est pas trouvé, contentPanel1 est null.


Mise à jour 1

En regardant le rendu HTML:

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

j'ai essayé de changer le code-behind en:

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

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

Mais ça n'a pas aidé.

j'utilise une page maître.


Mise à jour 2

Changer le fichier aspx en:

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

aussi n'a pas aidé


Réponse

La réponse est évidente et indigne de poser même la question initiale. Si vous avez le code aspx:

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

et voulez accéder à l'iframe à partir du fichier code-behind, il vous suffit d'y accéder:

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

Si l'iframe se trouve directement sur la page où le code est exécuté, vous devriez pouvoir le référencer directement:


contentPanel1.Attribute = value;

Sinon (dans un contrôle enfant ou dans la page principale), vous aurez besoin d'une bonne idée de la hiérarchie de la page ... Ou utilisez la méthode brute-force pour écrire une version récursive de FindControl ().

11
AaronSieb

Cela fonctionne pour moi. 

ASPX:  

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

Je peux accéder directement à l'iframe via id.

Code Derrière:  

ContentIframe.Attributes["src"] = "stackoverflow.com";
12
Mark Ibanez

Essayez d'utiliser

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

au lieu.

1
Joe Ratzer

Où est votre iframe intégré?

Ayant ce code

<body>

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

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

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

Je peux accéder avec iFrame1.Attributes["src"] uniquement à iFrame1 et non à iFrame2.

Alternativement, vous pouvez accéder à n’importe quel élément de votre formulaire avec:

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

Essaye ça.

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

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

0
Nathan Pillai

Essayez d'instancier contentPanel1 en dehors de l'événement Load. gardez-le global à la classe.

0
Ian Jacobs

La méthode FindControl recherche dans les contrôles enfants du "contrôle" sur lequel la méthode est exécutée. Essayez de regarder récursivement dans la collection de contrôles.

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

Aucune de vos suggestions n'a fonctionné pour moi, voici ma solution:

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

page aspx

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

Code derrière

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

Très simple....

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

Vous devriez leur permettre de trouver votre iframe en utilisant la méthode findcontrol.

définir clientIDMode sur Static vous empêche de renommer un objet lors du rendu. 

0
Sedecimdies