Comment puis-je accéder à une IFRAME à partir du fichier codebehind ASP.NET je ne sais pas.
j'essaie de définir les attributs d'un contrôle html IFRAME à partir du code-derrière aspx.cs fichier.
je suis tombé sur un post qui dit que vous pouvez utiliser FindControl pour trouver le non-asp contrôles à l'aide de:
Le fichier aspx contient:
<iframe id="contentPanel1" runat="server" />
et puis 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 qu'il ne trouve pas le contrôle, contentPanel1 est nul.
mise à Jour 1
en Regardant le rendu html:
<iframe id="ctl00_ContentPlaceHolder1_contentPanel1"></iframe>
j'ai tenté de changer le code-behind:
HtmlControl contentPanel1 = (HtmlControl)this.FindControl("ctl00_ContentPlaceHolder1_contentPanel1");
if (contentPanel1 != null)
contentPanel1.Attributes["src"] = "http://www.clis.com";
Mais il n'a pas aidé.
j'utilise une page principale.
mise à Jour 2
changer le fichier aspx en:
<iframe id="contentPanel1" name="contentPanel1" runat="server" />
n'a pas aidé
Réponse
la réponse est évidente, et indigne même de demander question d'origine. Si vous avez le code aspx:
<iframe id="contentPanel1" runat="server" />
et souhaitez accéder à l'iframe dans le code-behind de fichier, il vous suffit d'accéder:
this.contentPanel1.Attributes["src"] = "http://www.stackoverflow.com";
10 réponses
si l'iframe est directement sur la page où le code est en cours d'exécution, vous devriez pouvoir le référencer directement:
contentPanel1.Attribute = value;
si non (c'est dans le contrôle de l'enfant, ou 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().
ça marche pour moi.
ASPX:
<iframe id="ContentIframe" runat="server"></iframe>
je peux accéder à l'iframe directement via id.
Code Behind:
ContentIframe.Attributes["src"] = "stackoverflow.com";
Essayez d'utiliser
c'.Maître.FindControl ("ContentId").FindControl ("controlId")
à la place.
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"]
juste à iFrame1 et pas à iFrame2.
Alternativement, vous pouvez accéder à n'importe quel élément dans votre formulaire:
FindControl("iFrame2") as System.Web.UI.HtmlControls.HtmlGenericControl
essayez instanciating contentPanel1 en dehors de L'événement Load; gardez-le global pour la classe.
La méthode FindControl regarde dans les contrôles enfants de "contrôle", la méthode est exécutée. Essayez de regarder à travers la collection de contrôle récursivement.
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;
}
<iframe id="yourIframe" clientIDMode="static" runat="server"></iframe>
vous devriez être capable de trouver votre iframe en utilisant la méthode findcontrol.
clientIDMode
Static
empêche l'objet d'être renommé pendant le rendu.
Aucune de vos suggestions a fonctionné pour moi, voici ma solution:
add src="<%=_frame1%>" //to the iframe id="frame1" html control
public string _frame1 = "http://www.google.com";
aspx page
<iframe id="fblikes" runat="server"></iframe>
Code derrière
ceci.fblikes.Attributs ["src"] = "/productdetails/fblike.ashx";
très simple....