3

このコードを見てください:

        static int i = 0;
       protected void Page_Load(object sender, EventArgs e)
    {
        HtmlButton myButton;
        if (!Page.IsPostBack)
        {
            myButton = new HtmlButton();
            myButton.InnerText = "Button first load";
            myButton.ID = i.ToString();
            PlaceHolder1.Controls.Add(myButton);
            i++;
        }
        else
        {
            myButton = new HtmlButton();
            myButton.InnerText = "Button postback" + i.ToString();
            myButton.ID = i.ToString();
            PlaceHolder1.Controls.Add(myButton);
            i++;
        }
    }

期待される:

       first load:  "Button first load"
       first postback: first load + "Button postback1"
       second postback: first postback + "Button postback2" ... and so on.

持ってる:

      "Button first load"
      "Button postback1"
      "Button postback2".

なんで?

4

1 に答える 1

3

あなたの期待される結果は本当に間違っています...:)

今起こっていることは、まさにあなたがコードに書いたことです:

最初のロード(ポストバックではない):

 myButton.InnerText = "Button first load";

それで:

"Button first load"

2番目、3番目、n番目のロード(ポストバック):

 myButton.InnerText = "Button postback" + i.ToString();

それで:

"Button postback1"
"Button postback2"
.
.
.

アップデート:

私はあなたの問題を理解したので...

ASP.NETは動的コントロールの状態を保持しないため、ポストバック後にそれらを再作成することはできません。

結論:ポストバックを行うたびに、動的に追加されたコントロールを再作成する必要があります。

これが私が2年以上前に与えた答えであり、そのような状況に対処するための良い方法を示しています。

https://stackoverflow.com/a/2982271/114029

于 2012-10-17T21:32:25.243 に答える