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