Как я могу получить доступ к IFRAME из файла codebehind в ASP.NET?
Я пытаюсь установить атрибуты для элемента управления IFRAME html из файла aspx.cs для кода.
Я столкнулся с сообщением в котором говорится, что вы можете использовать FindControl для поиска элементов управления без aspp, используя:
Файл 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";
Ответы
Ответ 1
Если iframe находится непосредственно на странице, где работает код, вы можете обратиться к нему напрямую:
contentPanel1.Attribute = value;
Если нет (это в дочернем элементе управления или MasterPage), вам понадобится хорошая идея иерархии страницы... Или используйте метод грубой силы для записи рекурсивной версии FindControl().
Ответ 2
Это работает для меня.
ASPX:
<iframe id="ContentIframe" runat="server"></iframe>
Я могу получить доступ к iframe напрямую через id.
Код за:
ContentIframe.Attributes["src"] = "stackoverflow.com";
Ответ 3
Попробуйте использовать
this.Master.FindControl( "ContentID" ). FindControl ( "ControlID" )
вместо.
Ответ 4
Где ваш встроенный 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
Ответ 5
Попробуйте создать экземпляр contentPanel1 вне события загрузки; держите его глобальным для класса.
Ответ 6
Метод FindControl просматривает дочерние элементы управления "control", в котором выполняется метод. Попробуйте просмотреть рекурсивные коллекции управления.
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;
}
Ответ 7
Попробуйте это.
ContentPlaceHolder cplHolder = (ContentPlaceHolder) this.CurrentMaster.FindControl( "contentMain" );
HtmlControl cpanel = (HtmlControl) cplHolder.FindControl( "contentPanel1" );
Ответ 8
<iframe id="yourIframe" clientIDMode="static" runat="server"></iframe>
Вам нужно, чтобы они могли найти ваш iframe с помощью метода findcontrol.
настройка clientIDMode
- Static
предотвращает переименование объекта во время рендеринга.
Ответ 9
Ни одно из ваших предложений не сработало для меня, вот мое решение:
add src="<%=_frame1%>" //to the iframe id="frame1" html control
public string _frame1 = "http://www.google.com";
Ответ 10
aspx page
<iframe id="fblikes" runat="server"></iframe>
Код за
this.fblikes.Attributes [ "src" ] = "/productdetails/fblike.ashx";
Очень просто....