我正在尝试从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
我在错误的地方定义了这个吗?
答案 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)
您需要将页面实例传递给母版页。我可能会在页面类中向主页面传递某种回调函数。