我正在创建的Usercontrol由3个文件组成(ascx,ascx.cs和ascx.designer.cs)
我的问题:
在aspx页面中创建的控件(asp:Button runat =“server”id =“mybutton”/>)未正确初始化,因此附加到“Load”事件并尝试使用按钮,结果在null对象异常中
我怀疑这是一个Visual Studio问题,无论是奇怪的bug还是异常的设置,但如果我做的事情愚蠢的话我也不会感到惊讶。
我尝试过的工作
我在Visual Studio中将另一个正在运行的用户控件从另一个项目复制到这个项目中,它也无效(ascx页面中定义的控件在代码页面后面的load事件中为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;
答案 0 :(得分:2)
我已经通过添加到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>
解释web.config文件添加的链接(请注意本文不直接解决我的问题)
我个人觉得我的自定义控件的“网站范围”声明应该是必需的,但它解决了问题,所以我正在使用它,但仍然希望我明白为什么它需要是这样做了。