从母版页中查找确切的ASP.NET页面类型

时间:2010-01-06 22:01:11

标签: .net asp.net vb.net reflection asp.net-2.0

我正在尝试从MasterPage内部检索页面类上的自定义属性集。通常要做到这一点,我需要直接反映特定的类,但在Master页面内,它总是被称为Page类型(父类)。

如何确定Page属性的具体类型?

以下是我尝试做的事情的一个例子:

Dim attrs() As Object = Page.GetType().GetCustomAttributes(GetType(MyCustomAttribute), False)
For Each attr As MyCustomAttribute In attrs
    ' Do something '
Next

但它只返回附加到实际Page类的属性。

如果可以避免,我宁愿不必从Page派生新的基本类型。

以下是我的类的定义方式(在代码隐藏中):

<MyCustom()> _
Partial Class PageClass

我在错误的地方定义了这个吗?

3 个答案:

答案 0 :(得分:2)

虽然Page是实际类型,但它是一个表示ASPX页面的类,而不是我的属性附加到的部分类。要查找部分课程,我只需要执行以下操作:

Page.GetType().BaseType

并使用我的属性查找代码。

感谢TonyB和this SO question指出我正确的方向。

答案 1 :(得分:1)

我认为您将错误的类型传递给GetCustomAttributes

我在我的母版页上添加了一个名为“lblMP”的标签,当我运行它时:

    protected void Page_Load(object sender, EventArgs e)
    {
        lblMP.Text = this.Page.GetType().AssemblyQualifiedName;

        foreach( var a in Attribute.GetCustomAttributes(this.Page.GetType()))
        {
            lblMP.Text = String.Format("{0} <br />{1}", lblMP.Text, a);
        }
    }

它正确显示添加到Default.aspx的自定义属性。这是显示我的“MPTesting.CustomAttribute”属性的输出。

ASP.default_aspx, App_Web_tkeebnzk, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null
System.Runtime.CompilerServices.CompilerGlobalScopeAttribute
MPTesting.CustomAttribute
System.ComponentModel.DesignerAttribute
System.ComponentModel.ToolboxItemAttribute
System.ComponentModel.DefaultEventAttribute
System.ComponentModel.DesignerCategoryAttribute
System.ComponentModel.Design.Serialization.DesignerSerializerAttribute
System.ComponentModel.DesignerAttribute
System.ComponentModel.Design.Serialization.DesignerSerializerAttribute
System.ComponentModel.DefaultPropertyAttribute
System.ComponentModel.BindableAttribute
System.Web.UI.ThemeableAttribute
System.Web.UI,Require

答案 2 :(得分:0)

您需要将页面实例传递给母版页。我可能会在页面类中向主页面传递某种回调函数。