Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 当用户控件引用父用户控件中的usercontrol时出现NullReferenceException_Asp.net - Fatal编程技术网

Asp.net 当用户控件引用父用户控件中的usercontrol时出现NullReferenceException

Asp.net 当用户控件引用父用户控件中的usercontrol时出现NullReferenceException,asp.net,Asp.net,我有一个从uc2继承的用户控件(uc1)。uc2在标记中声明了一个用户控件(uc3)。我正试图从uc1访问uc3,但我得到NullReferenceException。我原以为由于继承,uc3会实例化,但看起来我遗漏了一个步骤 澄清: 子用户控件如何从基类继承标记?基本用户控件中的服务器控件在基本用户控件的代码隐藏中为空。为什么?查看如何使用FindControl方法并遍历页面结构。里克·斯特拉尔的文章:经历了这一切。这可能是一个昂贵的操作,尤其是当你需要在树上走来走去的时候 .Net 1.1和

我有一个从uc2继承的用户控件(uc1)。uc2在标记中声明了一个用户控件(uc3)。我正试图从uc1访问uc3,但我得到NullReferenceException。我原以为由于继承,uc3会实例化,但看起来我遗漏了一个步骤

澄清:


子用户控件如何从基类继承标记?基本用户控件中的服务器控件在基本用户控件的代码隐藏中为空。为什么?

查看如何使用
FindControl
方法并遍历页面结构。里克·斯特拉尔的文章:经历了这一切。这可能是一个昂贵的操作,尤其是当你需要在树上走来走去的时候


.Net 1.1和2.0之间还有一个关键区别,在1.1中,隐藏的代码继承自aspx页面,您可以在这两个页面中声明您的控制变量,但2.0使用部分类组合形成一个类,只需要一个声明,请参阅

您是否尝试过uc1.uc3=新建uc3,您在其中创建了uc1的实例?这应该可以解决问题。

公共类Uc2:UserControl
{ 私人Uc3 Uc3; 公共Uc3 Uc3 { 获取{return\u uc3;} } }

公共类Uc3:UserControl { } 公共类Uc1:Uc2 { 公共Uc1() { Uc3 Uc3=this.Uc3; //或 Uc3 Uc3_接口=((IUc3)页).Uc3; } } 公共接口IUc3 { Uc3 Uc3{get;} } 公共类PageContainer:第页,IUc3 { 私有Uc2 _Uc2;//必须被分配或必须存在于标记设计器中

    public Uc3 Uc3
    {
        get { return _uc2.Uc3; }
    }
}

Find控件可以完成这项工作,但这不是一个好的做法。如果您更改标记中的控件id,编译器将无法捕获它,请不惜一切代价避免 使用制度; 使用系统数据; 使用系统配置; 使用System.Web; 使用System.Web.Security; 使用System.Web.UI; 使用System.Web.UI.WebControl; 使用System.Web.UI.WebControl.WebParts; 使用System.Web.UI.HTMLControl

命名空间WebApplication5 {


}

请发布代码好吗?哪种代码?我正在尝试将事件连接到uc3(第三方控制)来自uc1。uc3驻留在uc2的标记中。uc2是uc1的父级。问题是uc3为空。您在哪个页面事件中尝试访问uc3?uc3在页面生命周期中的何处可以访问?请提供一个代码示例。有很多方法可以做到这一点,但正如Dave Anderson所说,不要使用FindControl。也许您可以尝试访问任何控件属性。找不到uc3用户控件。不知道为什么它未在主机用户控件中初始化。
public class Uc2: UserControl  
{
    private Uc3 _uc3;

    public Uc3 Uc3
    {
        get { return _uc3; }
    }
}
public class Uc3 : UserControl
{
}
public class Uc1 : Uc2
{
    public Uc1()
    {
        Uc3 uc3 = this.Uc3;
        //or
        Uc3 uc3_interface = ((IUc3)Page).Uc3;
    }
}
public interface IUc3
{
    Uc3 Uc3 { get; }
}
public class PageContainer : Page, IUc3
{
    private Uc2 _uc2; //must be assigned or must exist in markup thus designer

    public Uc3 Uc3
    {
        get { return _uc2.Uc3; }
    }
}