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