私が作成しているユーザーコントロールは、予想どおり3つのファイル(ascx、ascx.cs、およびascx.designer.cs)で構成されています。
私の問題 :
aspxページ(asp:Button runat = "server" id = "mybutton" />)で作成されたコントロールが正しく初期化されていないため、「Load」イベントにアタッチしてボタンを使用しようとすると、オブジェクトがnullになります。例外
これはVisualStudioの問題であり、奇妙なバグまたは異常な設定のいずれかであると思われますが、愚かなことをしていても驚かないでしょう。
私が試みた回避策
別のプロジェクトから別の作業中のユーザーコントロールをVisualStudioのこのプロジェクトにコピーしましたが、それも機能しません(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;