0

私は以下のコードに縮小した問題で立ち往生しています。aspx ページに 2 つのボタンがあります。両方のボタンにrunat="server"プロパティがあり、<form runat="server" >タグ内にあります

btnGetData

 protected void btnGetData_Click(object sender, EventArgs e)
 {
            headlines = masg.Split('*');
            //Response.Write(headlines.Length);
            cb = new CheckBox[headlines.Length];

            for (int i = 0; i < headlines.Length; i++)
            {
                cb[i] = new CheckBox();

                cb[i].Text = headlines[i];
                Literal br = new Literal();
                br.Text = "<br/>";
                Form.Controls.Add(cb[i]);
                Form.Controls.Add(br);
            }

 }     

[データの取得] ボタンをクリックすると、関連付けられたテキストを含む複数のチェックボックスが生成されます。

いくつかのチェックボックスをクリックしてから、[Show] ボタンをクリックします。これは、 IF WORKS CORRECTLYで、選択したチェックボックスのテキストを 1 つの文字列に結合して表示する必要があります。

ボタン表示

protected void btnShow_Click(object sender, EventArgs e)
{



            for (int i = 0; i < headlines.Length; i++)
            {
                if (cb[i].Checked)
                    newmsg += cb[i].Text + '*';
            }
            Response.Write("<BR><BR><BR>" + newmsg);

}

しかし、GetData ボタンをクリックすると、チェックボックスは保持されないため失われます。変数について読みましSESSIONたが、それらを適用する方法がわかりません。ページ全体でアクセスできるように、以下の変数をグローバルとして宣言しました。

CheckBox[] cb;
string[] headlines;
string masg;

コードを手伝ってください。コードの入力を教えてください。何か明確にできない場合は、質問を絞り込みます。

4

1 に答える 1

3

HTTP はステートレスであるため、すべてのポストバック (Page_Initまたは)で動的に作成されたコントロールを再作成する必要があります。Page_Load何を再作成する必要があるかを知る必要があります。CheckBoxesしたがって、すでに作成されている数をViewState変数に保存できます。

以前と同じ ID を割り当ててPage_Load、最後に追加するだけです。作成するコントロールの数がわかっている場合は、コントロール ID に追加することで、カウンター変数から ID を取得できます。

推奨される測定値:

または、これを自動的に行うRepeaterのような組み込みのData-Bound Controlのいずれかを使用します。それらを設定して()を呼び出すだけです。DataSourceDataBind

実装の詳細を含む同様の質問に対する私の回答は次のとおりです。

于 2012-12-10T11:35:28.383 に答える