Как я могу получить доступ к IFRAME из файла codebehind в ASP.NET? - PullRequest
26 голосов
/ 03 октября 2008

Я пытаюсь установить атрибуты для HTML-элемента управления IFRAME из файла 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 имеет значение null.


Обновление 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";

Ответы [ 10 ]

12 голосов
/ 07 февраля 2012

Это работает для меня.

ASPX:

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

Я могу получить доступ к iframe напрямую через id.

Код сзади:

ContentIframe.Attributes["src"] = "stackoverflow.com";
12 голосов
/ 03 октября 2008

Если iframe находится непосредственно на странице, где выполняется код, вы должны иметь возможность ссылаться на него напрямую:


contentPanel1.Attribute = value;

Если нет (это дочерний элемент управления или MasterPage), вам понадобится хорошее представление об иерархии страницы ... Или используйте метод перебора для написания рекурсивной версии FindControl ().

1 голос
/ 20 марта 2014

Где встроен ваш 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
1 голос
/ 03 октября 2008

Попробуйте использовать

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

вместо.

0 голосов
/ 17 июня 2014

страница aspx

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

Код позади

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

Очень просто ....

0 голосов
/ 07 мая 2013

Ни одно из ваших предложений не сработало для меня, вот мое решение:

add src="<%=_frame1%>" //to the iframe id="frame1" html control
public string _frame1 = "http://www.google.com";
0 голосов
/ 02 августа 2012
<iframe id="yourIframe" clientIDMode="static" runat="server"></iframe>

Вы должны быть в состоянии найти ваш iframe с помощью метода findcontrol.

установка clientIDMode в Static предотвращает переименование объекта во время рендеринга.

0 голосов
/ 30 июля 2009

Попробуйте это.

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

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

0 голосов
/ 03 октября 2008

Метод 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;
    }
0 голосов
/ 03 октября 2008

Попробуйте создать экземпляр contentPanel1 вне события Load; оставьте его глобальным для класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...