页面文件中有10个HyperLink控件,ID号从HyperLink1~HyperLink10,我想在PageLoad过程中利用一个循环找到并且设置这些控件的属性,看下面代码:
protected void Page_Load(object sender, EventArgs e)
{
 if (!IsPostBack){
                for (int i = 0; i < 10; i++)
                {
                    string a = HyperLink" + (i + 1);
                    Control cr = Page.FindControl(a);                    if (cr != null)
                        Response.Write("found");
                    else
                        Response.Write("not found");
                }
     }
}请问:
1、为什么以上代码放在PageLoad中无法找到这些控件,结果显示“not found”,应该如何改动?
2、要用findcontrol方法找控件,放在在母版页(MasterPage)和普通页面页面中有什么区别?

解决方案 »

  1.   

    附上我的测试代码:<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default3.aspx.cs" Inherits="Default3" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml" >
    <head runat="server">
        <title>无标题页</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
            <asp:HyperLink ID="HyperLink1" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink2" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink3" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink4" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink5" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink6" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink7" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink8" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink9" runat="server">HyperLink</asp:HyperLink>
            <asp:HyperLink ID="HyperLink10" runat="server">HyperLink</asp:HyperLink></div>
        </form>
    </body>
    </html>using System;
    using System.Data;
    using System.Configuration;
    using System.Collections;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Web.UI.HtmlControls;public partial class Default3 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                for (int i = 0; i < 10; i++)
                {
                    string a = "HyperLink" + (i + 1);
                    Control cr = Page.FindControl(a);                if (cr != null)
                        Response.Write("found");
                    else
                        Response.Write("not found");
                }
            }
        }}
      

  2.   

    测试结果:foundfoundfoundfoundfoundfoundfoundfoundfoundfound
    HyperLink HyperLink HyperLink HyperLink HyperLink HyperLink HyperLink HyperLink HyperLink HyperLink
      

  3.   

    晕,你要搞清对象的层次关系,它有子控件呀,子控件还有子控件呀,你找的始终是Page那层,你要做个递归来找
      

  4.   

    如果是在母版页中查找控件, 则须使用如下方法:先找到ContentPlaceHolder,然后再找在这个ContentPlaceHolder中的你要找的控件我修改了代码, 测试通过:protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                for (int i = 0; i < 10; i++)
                {
                    string a = "HyperLink" + (i + 1);
                    Control cr = this.Page.Master.FindControl("ContentPlaceHolder1").FindControl(a);                if (cr != null)
                        Response.Write("found");
                    else
                        Response.Write("not found");
                }
            }
        }你试一下
      

  5.   

    多谢skyaspnet,但想不通为什么在masterpage中无法直接用Page.FindControl()找到,能解释一下原理吗
      

  6.   

    这是一个层次的关系, 它是父级, 母版页中包含的ASPX页面其实就是一个控件