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



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

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

Router myPage = (Router)Page;

在Visual Studio中,这一行出现红色波浪线,并出现错误"找不到类型或命名空间名称"Router"。奇怪的是,当我在web服务器上访问这个页面时,其中一个用户控件(Home.ascx(运行良好,但另一个用户控制器(Product.ascx。当它不起作用时,我会收到一个编译错误"CS0246:找不到类型或命名空间名称"Router"(是否缺少using指令或程序集引用?(",上面的一行显示为错误行。

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

我被难住了!

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

注:1( 这是一个网站而不是一个网络应用程序2( 没有名称空间在使用

根据一些研究和实验,似乎是因为ASP.NET"网站"项目的每个页面都被编译成一个单独的程序集,这意味着一个页面中的代码无法从另一个页面或控件访问。

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

App_Code文件夹中的代码对所有人都可用。

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

最新更新