C# 从ASPX页面中的UserControls访问控件

C# 从ASPX页面中的UserControls访问控件,c#,asp.net,C#,Asp.net,如何从ASPX页面中的UserControls访问控件? 例如: 我想访问ASPX页面上usercontrol中的gridview 请帮助我。最好的方法是在用户控件中提供您可以访问的属性 例如: public GridView UserGrid { get { return GridView1; } } 但问题是你为什么需要这个 经验法则:只暴露尽可能少的东西。这样,您的代码将是最健壮和可读的。因此,例如,最好公开它的数据源,而不是完整的Grid

如何从ASPX页面中的UserControls访问控件? 例如: 我想访问ASPX页面上usercontrol中的gridview


请帮助我。

最好的方法是在用户控件中提供您可以访问的属性

例如:

public GridView UserGrid
{
     get
     {
         return GridView1;
     }
}
但问题是你为什么需要这个

经验法则:只暴露尽可能少的东西。这样,您的代码将是最健壮和可读的。因此,例如,最好公开它的数据源,而不是完整的GridView

另一方面,如果您想让页面对UserControl中的事件做出反应,那么它应该提供定制的eventse.g。用户删除了页面可以处理的内容


因为这些控件现在在同一级别上互不相关,所以您必须使用父页面来获取它。试试这个逻辑:

创建引用父页面的属性由于控件的分层,控件通常所在的页面可能会有所不同

在页面上创建一个属性,引用网格所在的usercontrol,或直接链接到该网格

page.aspx

public UserControl UserGridControl
{
     get;
     set;
}
userControl.ascx

public Page ParentPage
{
     get;
     set;
}
示例调用:

首先实例化属性。在那之后,使用下面的语句访问该控件中的任何内容,作为我在这里使用Foo的一个示例,作为一个伪方法使用,但似乎有人不清楚:

otherControl.ascx:

this.ParentPage.UserGridControl.Foo();
编辑:想要有一个直接的代码示例,以便只从页面上进行编辑?见Tim Schmelters的回答。如果您还需要一种从另一个用户控件调用网格的方法。用我的。

试试这个:

GridView GridView1 = (GridView)WebUserControl1.FindControl("GridView1");
其中WebUserControl1是.aspx页上使用控件的ID


希望这有帮助。

什么是福?没有申报。我也看不出你的ParentPage属性的用途。OP询问了如何从该页面访问位于ASPX页面中的UserControl的GridView。所以这是多余的。你真的在批评一个更宽泛的答案吗?我只给了OP一个额外的方法,从另一个用户控件加载它。。。这很糟糕吗?我没有否决你的答案虽然部分似乎是从我的答案中复制的,所以你的答案不错,但它没有添加任何内容,也没有引用OP的要求。很抱歉,在我首先编写解决方案的文本版本后,复制了你的属性定义。我本来可以自己写的,但如果我们能从头开始自己写每一段代码,我们就会失业。我从没说过你的答案是错的。我只是提供了一种从另一个用户控件实现的方法。鉴于OP只提供了一个非常简短的问题,我们的解决方案可能都是正确的。我以前有过这个相关的问题,最后,StackOverflow是一个知识来源。这个解决方案也可以在页面上使用。我编辑了这篇文章,如果只需要在页面级别上使用,可以参考你的文章。