为什么在后台代码中Controls遍历不到前台HyperLink控件
前台代码
<form id="form1" runat="server">
<div>
<%
if(1==2){ %>
<asp:HyperLink ID="HyperLink1" runat="server">HyperLink1</asp:HyperLink>
<%} %>
<asp:HyperLink ID="HyperLink2" runat="server">HyperLink2</asp:HyperLink>
</div>
</form>
后台
--------------------编程问答-------------------- this.Controls[i]下边的Controls不找吗?一层循环可以?? --------------------编程问答--------------------
protected void Page_Load(object sender, EventArgs e)
{
for (int i = 0; i < this.Controls.Count; i++)
{
Control con = this.Controls[i];
string conid = con.ID;//遍历不到id HyperLink1 和 HyperLink2
}
Control con = this.FindControl("HyperLink2");//成功找到
}
foreach (Control ct in this.form1.Controls)//循环查询表单里面的子控件--------------------编程问答--------------------
{
if (ct.GetType().ToString().Equals("System.Web.UI.WebControls.HyperLink"))
{
....
}
}
foreach(Control c in form1.Controls)--------------------编程问答-------------------- if(1==2)因为你这个条件不成功,.net是先编译.aspx文件再去编译 Page_Load文件
{
if(c is HyperLink)
{
HyperLink link=c as HyperLink;
Response.Write(link.InnerText+"<br/>");
}
}
你可以尝试在page_oninit事件中去找 --------------------编程问答-------------------- if(1==2)因为你这个条件不成功,.net是先编译.aspx文件再去编译 Page_Load文件
你可以尝试在page_oninit事件中去找
--------------------
是么 不是吧,是先执行后台再执行前台的,当然在执行后台之前,已经能找到控件了,最关键原因是form1.Controls这才正确 --------------------编程问答--------------------
Page_Load(
是页面已经加载完的意思,你要以定义一个全局变量,然后在Page_Load中附值,去page中显示,应该是显示不了Page_Load中附给的值 --------------------编程问答--------------------
+1 --------------------编程问答--------------------
+1 --------------------编程问答-------------------- +1
--------------------编程问答-------------------- 参考视频:
http://www.cnblogs.com/insus/articles/2033414.html --------------------编程问答--------------------
如果是为了解决问题,这样不就行了。如果是探讨,可以深究
protected void Page_Load(object sender, EventArgs e)
{
Control con = this.FindControl("HyperLink1");//成功找到
Control con = this.FindControl("HyperLink2");//成功找到
}
补充:.NET技术 , ASP.NET