C# 找不到控件

C# 找不到控件,c#,asp.net,C#,Asp.net,我有一个aspx页面。在那个aspx页面中,我有两个用户控件。在第二个用户控件中,我想找到第一个用户控件的控件 ASPX文件 <table> <tr> <td> <uc1:ControlA ID="Page1" runat="server" /> <uc2:ControlB ID="Page2" runat="serv

我有一个aspx页面。在那个aspx页面中,我有两个用户控件。在第二个用户控件中,我想找到第一个用户控件的控件

ASPX文件

 <table>
          <tr>
              <td>
                   <uc1:ControlA ID="Page1" runat="server" />
                   <uc2:ControlB ID="Page2" runat="server" />
              </td>
          </tr>
 </table>

在我的第二个用户控件中

<%@ Reference VirtualPath="~/ControlA.ascx" %>

     protected void Page_Load(object sender, EventArgs e)
        {
            ControlA gridData = (ControlA)this.Page.FindControl("Page1");
        }

受保护的无效页面加载(对象发送方、事件参数e)
{
ControlA gridData=(ControlA)this.Page.FindControl(“Page1”);
}

这里,我得到的gridData仅为null。如何获取第一个用户控件的对象。首先加载用户控件1,然后加载第二个用户控件。所以首先应该加载。我调试并检查了它。

不要这样做。您正在硬连接这两个用户控件,这与它们的本质(可重用性)背道而驰。在这种情况下,正确的方法是在
ControlB
中提供一个自定义事件,该事件可由页面(两者的控制器)引发并处理。然后,页面可以使用
ControlA
中的属性或方法来执行所需操作。但是如果两个控件相互依赖的程度如此之大,那么最好使用一个控件。我不认为用户控件是这样呈现的,它应该是一个div。而且它们的ID必须在容器I'd前面加上前缀。@Rohit因为这是服务器端代码,使用
ID
而不是
ClientID
应该可以,生成的标记也不值得关注。更可能的情况是,该代码嵌套在另一个容器中,或者该控件尚未存在于页面的控件集合中。