0

ASP.Net ページでボタンがクリックされるたびにMyWUCtr.ascxを追加しようとしています。

ページ読み込みコード:

if (!Page.IsPostBack)
            {
                Session["ctrid"] = "0";
            }
            if (Session["myctrs"] != null)
            {
                Panel1.Controls.Clear();
                Panel p = ((Panel)Session["myctrs"]);
                foreach (Control c in p.Controls)
                {
                    if (c is UserControl)
                        Panel1.Controls.Add(c);
                }
            }

ボタンクリックコード:

int x = Convert.ToInt32(Session["ctrid"].ToString());

MyWUCtr ctr = LoadControl("~/MyWUCtr.ascx") as MyWUCtr;
ctr.ID = "myctr" + x.ToString();

x++;
Panel1.Controls.Add(ctr);
Session["myctrs"] = Panel1;
Session["ctrid"] = x.ToString();

このコントロールには、テキスト ボックスボタンが 1 つだけあります。

4

1 に答える 1

0

あなたの質問はあなたが経験している問題を明確にしません。

ただし、イベントハンドラーでコントロールを動的に追加する場合は、ページが読み込まれるたびに、同じ順序で同じIDを使用してコントロールを再作成および再追加する必要があります。これには、ViewStateのように永続的な場所で、追加したコントロールの数と、(変更できる場合は)どのコントロールのControlsコレクションにそれらを配置したかを追跡する必要があります。

ViewStateは状態を復元できますが、そのためには、ページのコントロールツリーにすでに存在している必要があります。したがって、それらを再作成する必要があります。GridViewのようなMicrosoftが提供するコントロールは、内部でそれを行います(そのため、それらを再バインドしなくても、DataItemCreatedイベントが発生します)が、イベントに反応してそれらを作成および追加するのは、ポストバック後にそれらを再作成する責任があります。

覚えておくべきことは、ページの読み込み時に自動的に作成されるコントロールは、マークアップとして宣言されたものだけであるということです。他のすべては、毎回追加する必要があります。

于 2012-09-09T01:06:38.237 に答える