ASP.NETの分離コードファイルからIFRAMEにアクセスするにはどうすればよいですか?

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

  •  03-07-2019
  •  | 
  •  

質問

コードビハインド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を見つけることができるはずです。

clientIDModeStaticに設定すると、レンダリング中にオブジェクトの名前が変更されなくなります。

あなたの提案のどれも私にとってはうまくいきませんでした、ここに私の解決策があります:

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

非常にシンプル。...

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top