通过虚拟路径动态实例化 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动态页面转静态页面