2009-12-18 195 views
0

我有一個IHttpModule動態提供.aspx頁面,這樣我就可以將它們打包到一個DLL中,並將其放入現有網站並提供我的頁面。動態頁面創建.aspx

我有一個從System.Web.UI.Page派生的類MyPage,它有一個.aspx,.aspx.cs和一個aspx.designer.cs文件。

當我嘗試實例化類I.e. MyPage myNewPage = MyPage(),所有子控件都爲空...

然後,我嘗試在IHttpModule的BeginRequest事件中使用Server.Execute(myNewPage)呈現該頁面輸出。

我知道我可以編譯頁面並使用反射器來獲得已編譯好的類,但有沒有更簡單的方法來實現這一點?

甚至更​​好的方法來做我在做什麼?

感謝, 鵝

+0

爲什麼你需要自己的HttpModule提供給您的aspx動態加載? – mfeingold 2009-12-18 16:44:20

+0

我的希望是將所有的.aspx頁面放入一個程序集並分發一個.DLL文件,以便可以使用我的頁面。 因此,在我的HttpModule中,我檢查了傳入路徑,例如/admin/something.aspx .../admin路徑中的任何內容都從我編譯的程序集中拉出,並且不存在於最終用戶asp.net站點中。 – Goosey 2009-12-18 18:31:13

+0

另外,動態編譯呢? – Goosey 2009-12-18 18:34:54

回答

0

我不認爲這是可能的。你不能像任何其他對象一樣實例化頁面。你需要什麼「可能」是一個VirtualPathProvider。

0

我不確定這是最好的解決方案,但是您可以將所有的aspx頁面嵌入到您的dll中作爲資產。根據請求從嵌入式資源提取aspx並寫入磁盤(如果尚未發生)。

可能有辦法從嵌入式資源提供aspx而不實際寫入磁盤,但我不確定。

0

aspx與ASP.NET運行時有一些親密的關係。我不認爲實例化它只是調用構造函數是個好主意。你可以做的反而是有一個空的(標準),ASPX和移動你的代碼,用戶控件 - ASCX

那些你可以使用LoadControl方法

+0

感謝您的迴應。 我實際上希望得到與LoadControl非常相似的東西,但是對於一個頁面。 我可能最終會走這條路,我只是希望有一個更清潔和更簡單的解決方案。 – Goosey 2009-12-18 18:00:17