2009-12-18 192 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