基本上覆雜的東西,你的情況Test
是實際Test.aspx
類的父(即ASPX文件。被編譯成繼承自Test
的類)。
要獲得Test.aspx
例如,一種選擇是使用直接編譯:
BuildManager.CreateInstanceFromVirtualPath("~/Test.aspx", typeof(Test));
或者你可以使用PageParser.GetCompiledPageInstance
作爲穆拉利MURUGESAN建議,他們幾乎等同。
請注意,這不是真的支持(「此API支持.NET Framework基礎結構,不能直接在您的代碼中使用」),但它確實起作用。其實我已經切換到默認PageHandlerFactory
在我的代碼,這是很多更穩定:
class LuPageHandlerFactory : PageHandlerFactory
{
public static LuPageHandlerFactory Instance = new LuPageHandlerFactory();
private LuPageHandlerFactory() { }
}
// Which lets me call this:
var handler =
LuPageHandlerFactory.Instance.GetHandler
(
HttpContext.Current, null, "~/Test.aspx", null
) as Test;
一個更簡潔的方法就是使用HttpContext.Current.RewritePath("~/Test.aspx");
和HttpContext.Current.Items
傳遞數據。
我的引擎實際上使用我提到的最後一種方法作爲回退 - 如果LuPageHandlerFactory
方法拋出SecurityException
,我回退到RewritePath
。 您還應該處理HttpCompileException
。
@Serge的編制情況,能否請你解釋一下了。不清楚你 –
偉大的作品。我更喜歡你的解決方案,而不是Luaan的解決方案,因爲你不需要知道除url之外的任何內容(這使得你的解決方案更適合廣泛使用)。 – Serge
@系列,歡迎您:) –