我有一个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)将我带回到真正的父级。
这会让我在那里,但似乎有更好的方法。有什么建议吗?
答案 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”]中。这样,您的用户控件就可以轻松获取该值