通过虚拟路径动态实例化 ASP.NET 页面类对象

Posted

技术标签:

【中文标题】通过虚拟路径动态实例化 ASP.NET 页面类对象【英文标题】:Dynamically Instantiate ASP.NET page class object by virtual path 【发布时间】:2012-07-02 13:41:17 【问题描述】:

这可以吗?怎么做?

我尝试了以下方法但没有成功:

Method1 使用 BuildManager.CreateInstanceFromVirtualPath - 发布后不起作用。 (我认为它失败了,因为我使用强名称程序集预编译,不确定)。

方法2使用以下代码:

Page page = new SchedulerTest();  // An ASPX Page class (note: CodeBehind) 
page.AppRelativeVirtualPath =
context.Request.AppRelativeCurrentExecutionFilePath; 
page.ProcessRequest(context);

如发现 here - 因为我不知道页面类名称而无法工作 在运行时。

【问题讨论】:

+1 表示有趣的问题/-1 表示随机链接而不是解释= 0。除了链接之外,请用几个句子解释“方法 2”。链接可能会失效,并且问题(或答案)停止在将来没有意义。 【参考方案1】:

好吧,这就是我的想法。

a) 为什么直到运行时才知道类的名称?你如何计算出类名将是什么?如果您可以解决关系,那么您可以使用反射来创建页面的实例,然后使用它。

b) 你真正想要达到什么目的?如果您尝试根据某些条件(查询字符串或其他内容)将请求路由到另一个请求,那么您可以使用 HttpModule 并重写路径。我正在努力看看您可能还想做什么。这样你就可以再次使用你的虚拟路径了。

【讨论】:

我会尝试更好地解释我的情况:发生错误时,我们的系统会重定向到 'ErrorPage' 并使用查询 'errouniousPage=~/path/PageErrorOccurredOn.aspx'。当我处理对“ErrorPage”的请求时,我想获取“PageErrorOccurredOn”对象实例来检查它使用的母版页。 我能看到的最简单的方法是在请求发生时存储有关请求的信息。然后,当错误发生时,您可以弹出最后的信息 - 或您正在使用的任何信息。使用类似共享基类和 oninit 或 load 方法添加到会话或某处。可以加载您想要的任何信息 - 当前相对 url、母版页、页面名称。就“好”而言,可能不是您所追求的,但是..听起来无论哪种方式都做得不好。

以上是关于通过虚拟路径动态实例化 ASP.NET 页面类对象的主要内容,如果未能解决你的问题,请参考以下文章

一个文件搞定Asp.net core 3.1动态页面转静态页面

asp.net中Server.MapPath是啥意思?

asp.net网站在IIS上获取虚拟路径的问题!

ASP.NET路由系统实现原理:HttpHandler的动态映射

16. 在.NET中,一个页面对象是( )类的实例。

从模板化控件中调用 ASP.net 页面对象时为空