كيف يمكنني الوصول إلى IFRAME من codebehind الملف في ASP.NET?

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

  •  03-07-2019
  •  | 
  •  

سؤال

أنا أحاول أن تعيين سمات IFRAME html التحكم من التعليمات البرمجية-خلف aspx.cs الملف.

جئت عبر بعد التي تقول يمكنك استخدام 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 باطل.


تحديث 1

تبحث في المقدمة html:

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

حاولت تغيير التعليمات البرمجية إلى:

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 كود:

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

و ترغب في الوصول إلى iframe من ملف التعليمات البرمجية الخلفية ، يمكنك فقط الوصول إليه:

this.contentPanel1.Attributes["src"] = "http://www.stackoverflow.com";
هل كانت مفيدة؟

المحلول

إذا iframe مباشرة على الصفحة حيث يتم تشغيل التعليمات البرمجية, يجب أن تكون قادرة على الإشارة مباشرة:


contentPanel1.Attribute = value;

إن لم يكن (هو في الطفل التحكم ، أو MasterPage), سوف تحتاج فكرة جيدة التسلسل الهرمي الصفحة...أو استخدام القوة الغاشمة طريقة كتابة متكررة نسخة من FindControl().

نصائح أخرى

هذا يعمل بالنسبة لي.

ASPX :

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

لا يمكن الوصول إلى iframe مباشرة عن طريق id.

التعليمات البرمجية خلف :

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"] فقط iFrame1 و لا iFrame2.

بدلا من ذلك, يمكنك الوصول إلى أي عنصر في النموذج الخاص بك مع:

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

حاول استخدام

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

بدلا من ذلك.

محاولة إنشاء مثيل contentPanel1 خارج الحمل الحدث ؛ يبقيه العالمية إلى فئة.

على FindControl الأسلوب يبدو في الطفل الضوابط من "السيطرة" على طريقة تنفيذها على.حاول تبحث من خلال السيطرة على جمع متكرر.

    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)هذا.CurrentMaster.FindControl("contentMain");

HtmlControl لوحة التحكم= (HtmlControl)cplHolder.FindControl("contentPanel1");

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

يجب عليها أن تكون قادرة على العثور على iframe باستخدام findcontrol الأسلوب.

الإعداد 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>

التعليمات البرمجية خلف

هذا.fblikes.سمات["src"] = "/برودوكتديتيلس/fblike.ashx";

بسيطة جدا....

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top