我正在尝试从代码隐藏的aspx.cs文件中为IFRAME html控件设置属性。
我遇到一个post,说你可以使用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";
答案 0 :(得分:12)
如果iframe直接位于运行代码的页面上,您应该可以直接引用它:
contentPanel1.Attribute = value;
如果不是(它在子控件或MasterPage中),您需要对页面的层次结构有一个好主意...或者使用强制方法编写FindControl()的递归版本。
答案 1 :(得分:12)
这对我有用。
ASPX:
<iframe id="ContentIframe" runat="server"></iframe>
我可以通过ID直接访问iframe。
代码背后:
ContentIframe.Attributes["src"] = "stackoverflow.com";
答案 2 :(得分:1)
尝试使用
this.Master.FindControl("ContentId").FindControl("controlId")
代替。
答案 3 :(得分:1)
您的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
答案 4 :(得分:0)
尝试在Load事件之外实例化contentPanel1;让它在全球范围内保持全球化。
答案 5 :(得分:0)
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;
}
答案 6 :(得分:0)
试试这个。
ContentPlaceHolder cplHolder =(ContentPlaceHolder)this.CurrentMaster.FindControl(“contentMain”);
HtmlControl cpanel =(HtmlControl)cplHolder.FindControl(“contentPanel1”);
答案 7 :(得分:0)
<iframe id="yourIframe" clientIDMode="static" runat="server"></iframe>
你应该能够使用findcontrol方法找到你的iframe。
将clientIDMode
设置为Static
会阻止您在渲染时重命名对象。
答案 8 :(得分:0)
您的建议都不适合我,这是我的解决方案:
add src="<%=_frame1%>" //to the iframe id="frame1" html control
public string _frame1 = "http://www.google.com";
答案 9 :(得分:0)
aspx页面
<iframe id="fblikes" runat="server"></iframe>
背后的代码
this.fblikes.Attributes [&#34; src&#34;] =&#34; /productdetails/fblike.ashx" ;;
非常简单....