给定一个成员对象获取对当前类(ascx或aspx)的引用
给定某个文件(可以是usercontrol/ascx或aspx)的控件SomeControl
的实例如何获取引用到它所属的班级?给定一个成员对象获取对当前类(ascx或aspx)的引用
在用户控件中,SomeControl.NamingContainer
似乎是可靠的。
在从一个母版继承了一个页面,这将参考返回ContentPlaceHolder
,而不是实际的类定义的aspx。我想在这种情况下是SomeControl.Page
Parent
将在heirarchy返回父控制,所以没有太大的用处。
有没有什么方法可以直接得到这个,不管它是什么类型的东西?
回答:
您需要区分是否是类的成员,并且是页面上的可寻址控件。有一个区别 - 一个是面向对象编程语言的属性,另一个是添加到ASP.NET的WebForms实现中的构造。
将控件添加到default.aspx会将该控件添加到页面的Controls集合中。只要相关控件未包含在其他控件模板中(或者该模板被标记为InstanceTemplate,就像ContentPlaceholder一样),设计人员就会自动将该引用添加到页面类中。该引用基本上是一个围绕Page.FindControl的快捷方式。
通过实现INamingContainer接口,控件的NamingContainer是第一个负责确保其内部控件的唯一性的ParentControl。
这听起来像你想要做的是找到一个控制与关联的页面?为此,您需要遍历控件树(按照每个控件的.Parent属性),检查父类型是否为Page类型。
回答:
你将不得不使用Parent属性,并以递归方式:
public Control GetParent(Control ctl) {
Control parent = ctl.Parent;
while (parent != null)
{
if (parent is UserControl || parent is Page)
return parent;
parent = parent.Parent;
}
return ctl.Page;
}
类似的东西。这是识别控件的父容器的唯一方法,无论它是在UC还是在Page中。控件只能识别页面,不能识别它所属的用户控件,除非通过Parent属性。
HTH。
以上是 给定一个成员对象获取对当前类(ascx或aspx)的引用 的全部内容, 来源链接: utcz.com/qa/260151.html