1

ASPページに動的に追加する必要があるユーザーコントロール「UserApplianceControl」があります。

私は次のコードでそうしています:

ユーザー.aspx.cs

protected override void OnLoadComplete(EventArgs e)
    {

        base.OnLoadComplete(e);
        A5Lib.User u;
        UserServiceReference.UserServicesClient myProxy = new UserServiceReference.UserServicesClient();
        u = myProxy.GetUser("user1");

        if (listOfAppliances != null)
        {

            foreach (A5Lib.Appliance str in u.Appliances)
            {
                UserApplianceControl uac = (UserApplianceControl)LoadControl("UserApplianceControl.ascx");
                uac.setAppliance(str);
                Panel1.Controls.Add(uac);
            }
        }
    }

UserApplianceControl には、いくつかのボタンがあります。ただし、ボタンを押すたびに、ユーザー コントロールのボタン ハンドラーが呼び出されることはありません。実際、OnLoadComplete(上記) が最初に呼び出されるため、最後のページの読み込み時に設定されたコントロールが再作成され、イベントを処理する前に古いコントロールが失われます。

OnLoadComplete の前にイベントが発生しないのはなぜですか?

4

1 に答える 1

2

ページのライフサイクルでコントロールを再作成するのが遅すぎます。

ビューステート/ポストバック機能が機能するには、動的に追加されたコントロールが onInit までに存在 (ロード) されている必要があります。

コードをページの OnInit イベントに移動します。これにより、viewstate が復元される前にすべてのコントロールが再構築され、ページがすべてのボタン/イベント フックを実行することが保証されます。

于 2012-04-20T20:46:22.553 に答える