在aspx上获取ascx

时间:2011-08-19 00:50:01

标签: c# asp.net user-controls

我有一个UserControl,它包含一个显示在aspx页面上的Parent和Child UserControls。我需要从子控件获取Parent UserControls的实例。 Parent有一组嵌套的.net控件,在这些嵌套控件中显示子UserControls,如果我从子UserControls中使用它;

MyControl _myControl = (MyControl)this.Parent.Parent.Parent.Parent.FindControl("MyControl");

其中(this)=子控件和(Parent.Parent.Parent.Parent)将我带回到真正的父级。

这会让我在那里,但似乎有更好的方法。有什么建议吗?

2 个答案:

答案 0 :(得分:5)

ascx不应该知道有关其父级的任何信息:这表明它与其他类太紧密耦合了。他们可能也是一个班级。

另一种方法是遵循law of Demeter:从this找出MyControl(您的用户控件)需要的内容,将其设为属性,并让您的aspx提供它而不是询问为了它。

答案 1 :(得分:1)

如果您正在使用母版页,则可以从那里开始并使用容器ID来查找控件。它只取决于控制更接近什么。

这可能会有所帮助: http://www.asp.net/master-pages/tutorials/control-id-naming-in-content-pages-cs

如果从父页面中的控件访问值,则可以执行的另一项操作是在页面加载时将该值放入HttpContext.Current.Items [“MyControlValue”]中。这样,您的用户控件就可以轻松获取该值