给定一个成员对象获取对当前类(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

回到顶部