如何从ASP.NET中的代码隐藏文件访问IFRAME?
时间:2020-03-06 15:05:24 来源:igfitidea点击:
我正在尝试从代码隐藏的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>
我试图将后面的代码更改为:
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";
解决方案
尝试在Load事件之外实例化contentPanel1;否则,请执行以下步骤。使它在全球范围内保持领先地位。
尝试使用
this.Master.FindControl(" ContentId")。FindControl(" controlId")
反而。
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; }
如果iframe直接位于运行代码的页面上,那么我们应该可以直接引用它:
contentPanel1.Attribute = value;
如果不是(位于子控件或者MasterPage中),则需要对页面的层次结构有一个很好的了解...,或者使用蛮力方法编写递归版本的FindControl()。
试试这个。
ContentPlaceHolder cplHolder =(ContentPlaceHolder)this.CurrentMaster.FindControl(" contentMain");
HtmlControl cpanel =(HtmlControl)cplHolder.FindControl(" contentPanel1");