从动态添加的用户控件投射和引用页面时出错

Error when casting and referencing Page from dynamically added User Control

我有一个 ASP.NET 4 网站(不是网络应用程序)。

一个 ASPX 页面 (Router.aspx) 我根据请求 URL 在运行时动态添加一个 ASCX 用户控件到占位符。在用户控件中,我需要从 ASPX 页面检索属性,因此我使用以下代码来引用该页面:

Router myPage = (Router)Page;

在 Visual Studio 中,这一行带有红色波浪线和错误 "The type or namespace name 'Router' could not be found"。奇怪的是,当我在 Web 服务器上访问此页面时,其中一个用户控件 (Home.ascx) 工作正常,但另一个 (Product.ascx) 却没有。当它不起作用时,我收到编译错误 "CS0246: The type or namespace name 'Router' could not be found (are you missing a using directive or an assembly reference?)",上面的行显示为错误行。

即使我将所有代码从 Home.ascx/.cs 复制到 Product.ascx/.cs,Product.ascx 仍然不起作用。

我难住了!

我猜测我引用 ASPX 页面的方式不正确,VS 错误试图告诉我一些事情。

注意: 1)这是一个网站而不是网络应用程序 2) 没有正在使用的命名空间

从一些研究和实验来看,似乎是因为 ASP.NET "Web site" 项目的每一页都被编译成一个单独的程序集,这意味着一个页面的代码无法从另一个页面访问或对照。

但是,如果页面使用母版页,则该页面可以访问母版页中的代码,但添加到页面的用户控件不能。

所有人都可以使用 App_code 文件夹中的代码。

我的问题的解决方案是在我的页面继承的 App_code 文件夹中创建一个基础 class,其中包含我需要对用户控件可用的所有方法和属性.然后在我的用户控件中,我可以将页面转换为基础 class 并访问这些方法和属性。