ASP.NETの分離コードファイルからIFRAMEにアクセスするにはどうすればよいですか?
質問
コードビハインドaspx.csファイルからIFRAME htmlコントロールの属性を設定しようとしています。
投稿を見つけましたFindControlを使用して、asp以外のコントロールを検索します。
aspxファイルには以下が含まれます。
<iframe id="contentPanel1" runat="server" />
そして分離コードファイルには以下が含まれます:
protected void Page_Load(object sender, EventArgs e)
{
HtmlControl contentPanel1 = (HtmlControl)this.FindControl("contentPanel1");
if (contentPanel1 != null)
contentPanel1.Attributes["src"] = "http://www.stackoverflow.com";
}
コントロールが見つからない場合を除き、contentPanel1はnullです。
更新1
レンダリングされたhtmlを見る:
<iframe id="ctl00_ContentPlaceHolder1_contentPanel1"></iframe>
iコードビハインドを次のように変更しようとしました:
HtmlControl contentPanel1 = (HtmlControl)this.FindControl("ctl00_ContentPlaceHolder1_contentPanel1");
if (contentPanel1 != null)
contentPanel1.Attributes["src"] = "http://www.clis.com";
しかし、それは役に立たなかった。
私はMasterPageを使用しています。
更新2
aspxファイルの変更先:
<iframe id="contentPanel1" name="contentPanel1" runat="server" />
も助けにならなかった
回答
答えは明白であり、元の質問をすることすら価値がありません。 aspxコードがある場合:
this.contentPanel1.Attributes["src"] = "http://www.stackoverflow.com";
コードビハインドファイルからiframeにアクセスするには、アクセスするだけです:
<*>解決
iframeがコードが実行されているページに直接ある場合、直接参照できるはずです:
contentPanel1.Attribute = value;
そうでない場合(子コントロールまたはMasterPage内にある場合)、ページの階層について十分に理解する必要があります...または、FindControl()の再帰バージョンを記述するブルートフォースメソッドを使用します。
他のヒント
これは私には有効です。
ASPX:
<iframe id="ContentIframe" runat="server"></iframe>
id経由でiframeに直接アクセスできます。
コードビハインド:
ContentIframe.Attributes["src"] = "stackoverflow.com";
iframeはどこに埋め込まれていますか?
このコードを持っている
<body>
<iframe id="iFrame1" runat="server"></iframe>
<form id="form1" runat="server">
<div>
<iframe id="iFrame2" runat="server"></iframe>
</div>
</form>
iFrame1.Attributes["src"]
でアクセスできるのは、iFrame2ではなくiFrame1だけです。
または、次の方法でフォームの任意の要素にアクセスできます:
FindControl("iFrame2") as System.Web.UI.HtmlControls.HtmlGenericControl
使用してみる
this.Master.FindControl("ContentId").FindControl("controlId")
代わりに。
loadPaintの外でcontentPanel1をインスタンス化してみてください。クラスに対してグローバルに保ちます。
FindControlメソッドは、<!> quot; control <!> quot;の子コントロールを検索します。メソッドが実行されます。コントロールコレクションを再帰的に調べてみてください。
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;
}
これを試してください。
ContentPlaceHolder cplHolder =(ContentPlaceHolder)this.CurrentMaster.FindControl(<!> quot; contentMain <!> quot;);
HtmlControl cpanel =(HtmlControl)cplHolder.FindControl(<!> quot; contentPanel1 <!> quot;);
<iframe id="yourIframe" clientIDMode="static" runat="server"></iframe>
findcontrolメソッドを使用してiframeを見つけることができるはずです。
clientIDMode
をStatic
に設定すると、レンダリング中にオブジェクトの名前が変更されなくなります。
あなたの提案のどれも私にとってはうまくいきませんでした、ここに私の解決策があります:
add src="<%=_frame1%>" //to the iframe id="frame1" html control
public string _frame1 = "http://www.google.com";
aspxページ
<iframe id="fblikes" runat="server"></iframe>
コードビハインド
this.fblikes.Attributes [<!> quot; src <!> quot;] = <!> quot; /productdetails/fblike.ashx <!> quot ;;
非常にシンプル。...