Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.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
C# 扩展usercontrol,如果在ascx页面上声明,则内部控件未初始化_C#_Asp.net_Web User Controls - Fatal编程技术网

C# 扩展usercontrol,如果在ascx页面上声明,则内部控件未初始化

C# 扩展usercontrol,如果在ascx页面上声明,则内部控件未初始化,c#,asp.net,web-user-controls,C#,Asp.net,Web User Controls,我正在创建的Usercontrol按预期由3个文件组成(ascx、ascx.cs和ascx.designer.cs) 我的问题是: 在aspx页面(asp:Button runat=“server”id=“mybutton”/>中创建的控件未正确初始化,因此附加到“Load”事件并尝试使用按钮会导致空对象异常 我怀疑这是VisualStudio的一个问题,要么是奇怪的bug,要么是异常的设置,但如果我做了一些愚蠢的事情,我也不会感到惊讶 我尝试过的工作 我已将另一个工作用户控件从另一个项目复制到

我正在创建的Usercontrol按预期由3个文件组成(ascx、ascx.cs和ascx.designer.cs)

我的问题是:

在aspx页面(asp:Button runat=“server”id=“mybutton”/>中创建的控件未正确初始化,因此附加到“Load”事件并尝试使用按钮会导致空对象异常

我怀疑这是VisualStudio的一个问题,要么是奇怪的bug,要么是异常的设置,但如果我做了一些愚蠢的事情,我也不会感到惊讶

我尝试过的工作

  • 我已将另一个工作用户控件从另一个项目复制到visual studio中的此项目中,但该控件也不起作用(ascx页面中定义的控件在代码隐藏页面的加载事件中为null,尽管它们在我复制它们的地方工作正常)

  • 我正在使用“CreateChildControls()”方法,就像我在其他一些复合控件中所做的那样,但是在load和init事件中,所有内容仍然为null

  • 我已经创建了一个单独的解决方案和项目文件,并添加了所有的文件和引用,但这仍然无助于解决这个问题

  • 在我看来,“页面生命周期”(控件生命周期?)由于某种原因没有正确初始化控件,但看不出原因,请帮助

    按要求发布我的代码:

    PersonalDetails.aspx
        <cwpEditControl:PersonalDetails runat="server" id="edtPersonalDetails" />
    
    PersonalDetails.ascx
        <%@ Control Language="C#" CodeBehind="PersonalDetails.ascx.cs" Inherits="company.web.CustomerWebPortal.controls.edit.PersonalDetails" %>        
        <asp:Button runat="server" ID="myTestButton" />         
    
    PersonalDetails.ascx.cs
        public PersonalDetails()
        {         
            this.Load += new EventHandler(PersonalDetails_Load);
        }
    
        void PersonalDetails_Load(object sender, EventArgs e)
        {
            this.myTestButton.Text = "Submit";  //this line creates an exception!
        }
    
    PersonalDetails.ascx.designer.cs
        protected global::System.Web.UI.WebControls.Button myTestButton;
    
    PersonalDetails.aspx
    PersonalDetails.ascx
    PersonalDetails.ascx.cs
    公开个人资料()
    {         
    this.Load+=新事件处理程序(PersonalDetails\u Load);
    }
    void PersonalDetails\u加载(对象发送方,事件参数e)
    {
    this.myTestButton.Text=“Submit”//此行创建了一个异常!
    }
    PersonalDetails.ascx.designer.cs
    受保护的全局::System.Web.UI.WebControls.Button myTestButton;
    
    我已通过添加到web.config文件修复了我的问题,基本上是在我创建的整个web应用程序中“注册”我的自定义控件:

    <pages>
      <controls>
        <add tagPrefix="scottgu" src="~/Controls/Header.ascx" tagName="header"/>
        <add tagPrefix="scottgu" src="~/Controls/Footer.ascx" tagName="footer"/>
        <add tagPrefix="ControlVendor" assembly="ControlVendorAssembly"/>
      </controls>
    </pages>
    

    
    


    我个人认为不需要自定义控件的“站点范围”声明,但它解决了问题,因此我正在使用它,但仍希望我了解为什么需要这样做。

    请参阅或@Rawling,这些答案是关于控件的动态加载,我特别没有调用“=newbutton()”(例如),也没有动态添加任何内容。ascx页面中定义的控件应该在“加载”事件发生时由.NET framework加载,但事实并非如此,为什么不呢?(或者我的理解是错误的,哈哈)@Nnoel啊,我明白你的意思了。如果我弄错了,我会道歉:)