1
我正在试图弄清楚我的webforms Page
是否是某种类型。如果页面是typeof自定义类
我有一些基类继承彼此:
BasePage -> System.Web.UI.Page
CMSPage -> BasePage
Page -> CMSPage
在自定义UserControl
,我需要的页面,但只有当它是从CMSPage
的。
我已经试过:
if(Page.GetType() == typeof(CMSPage))
但将gettype()的值只返回页面的类名。它看起来像我需要做的:
if(Page.GetType().BaseType.BaseType == typeof(CMSPage))
为了得到匹配的工作。但是,有些页面在达到CMSPage
的类型之前处于不同的BaseType
级别。
我可以通过每个BaseType
创建这样循环的功能,直到它找到合适的一个:
public static bool IsPageTypeOf(this System.Web.UI.Page page, Type targetType)
{
var pageType = page.GetType();
if (pageType == targetType)
return true;
while (pageType.BaseType != null)
{
if (pageType.BaseType == targetType)
return true;
pageType = pageType.BaseType;
}
return false;
}
但感觉凌乱。有一个更好的方法吗?
这最后一个是我最喜欢的,因为如果我想用它做点什么我已经准备好了一个强类型的参考 – n8wrl 2012-03-06 22:15:02
感谢您的建议。我试过'页面是MyPageType'和'MyPageType myPage =页面是MyPageType',但是它不断地返回'myPage'不是'null',即使在不是从'MyPageType'派生的页面上。 'if(typeof(CMSPage).IsAssignableFrom(Page.GetType()))'虽然有效!我也遇到过这样的情况:'if(Page.IsPageTypeOf(typeof(CMSPage)))'既可以工作,也不确定它们之间是否有很大的区别。 – 2012-03-06 22:21:11
@史密斯:那么你有什么不对,因为'当然*将*工作。它不可能给一个非正确类型的对象引用非空结果 - 这会违反类型安全性。 – 2012-03-06 22:24:52