ASP.NET 2.0-无法从自定义控件访问父页面类

ASP.NET 2.0-无法从自定义控件访问父页面类,asp.net,Asp.net,1) 我上过佩奇课 公共部分类MyDelivery:System.Web.UI.Page 2) ASCX位于不同的子文件夹中 公共部分类MyControls\u Hello\u Bye:System.Web.UI.UserControl 我无法从控件访问#1父页面类如果位于不同的目录中,则默认情况下visual studio会为它们提供不同的名称空间,从而导致父页面类对控件不可见 确保两个类的名称空间声明相同,或者使用语句将父页面类名称空间导入到contorl中。这个问题困扰了我很长一段时间。我

1) 我上过佩奇课 公共部分类MyDelivery:System.Web.UI.Page

2) ASCX位于不同的子文件夹中 公共部分类MyControls\u Hello\u Bye:System.Web.UI.UserControl


我无法从控件访问#1父页面类

如果位于不同的目录中,则默认情况下visual studio会为它们提供不同的名称空间,从而导致父页面类对控件不可见


确保两个类的名称空间声明相同,或者使用
语句将父页面类名称空间导入到contorl中。

这个问题困扰了我很长一段时间。我不认为我的解决方案是完美的,但它确实有助于我的初级开发人员进行编码。我们有一个所有用户控件都继承的基本用户控件,我们(和您一样)有一个所有页面都必须继承的基本页面类(团队规则)。用户控件中有一个名为ParentForm的属性,该属性被强类型化为将包含它的特定页面类型(如果页面基类是变量或当时未知的,则为页面基类)

在页面的加载事件期间,我们手动设置所有用户控件的Parentform属性(我们在母版页中也为所有母版页级别的控件设置了Parentform属性)

这提供了从任何用户控件返回页面及其任何公开方法的即时访问。它还提供了一种标准化(在我们的团队中)方法,允许控件通过父窗体中的接口在它们之间进行通信

我们的标准是手动执行此任务。对我来说,这是一个人事考虑,以确保开发人员知道他们正在添加的控件(如果您试图访问它,不设置父窗体将导致空引用异常)。如果希望自动执行此设置,可以使用基类的Page_InitComplete事件循环任何用户控件,并以这种方式将ParentForm设置为“this”

protected Page_Load(object sender, System.EventArgs e) 
{
    this.myControl.ParentForm = this;
    this.myControl2.ParentForm = this;
}