2

我正在创建的用户控件由 3 个文件组成(ascx、ascx.cs 和 ascx.designer.cs)

我的问题 :

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

我怀疑这是一个 Visual Studio 问题,可能是奇怪的错误或不寻常的设置,但如果我在做一些愚蠢的事情,我不会感到惊讶。

我尝试的解决方法

  1. 我已将另一个工作用户控件从另一个项目复制到 Visual Studio 中的该项目中,但它也不起作用(在 ascx 页面中定义的控件在页面后面代码的加载事件中为空,尽管它们在我复制它们的地方工作正常)

  2. 我正在使用“CreateChildControls()”方法,就像我在其他一些复合控件中所做的那样,但是在加载和初始化事件中一切仍然为空

  3. 我创建了一个单独的解决方案和项目文件,并添加了所有文件和引用,但这仍然无济于事。

在我看来,“页面生命周期”(控件生命周期?)由于某种原因没有正确初始化控件,但不明白为什么,请有人帮忙。

将我的代码作为请求发布:

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;
4

1 回答 1

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 文件的链接(请注意本文没有直接解决我的问题)

http://weblogs.asp.net/scottgu/archive/2006/11/26/tip-trick-how-to-register-user-controls-and-custom-controls-in-web-config.aspx

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

于 2012-06-07T11:57:47.473 回答