- - PR -
動的コントロールのPostBack
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2003-04-03 20:01
いつもお世話になります
Page_Load時にHTMLコントロールのHtmlAnchor(<A>タグ)を動的に作成しているのですが PostBackされると作成したコントロールが消えてしまいます。 これを残す方法はどういった方法がありますか? HTMLコントロールでは無理なのでしょうか? よろしくお願いします。 | ||||
|
投稿日時: 2003-04-04 10:38
IsPostBack で falseの場合だけ、コントロールを追加していませんか?
コントロールは、PostBack時に持ち越されて記憶されるわけでは ないので、毎回作成する必要があります。 ASPX内で記述しているコントロールも、ASP.NET自身が初期化時にコントロールを 毎回作成するコードを吐き出してコンパイルされています。 | ||||
|
投稿日時: 2003-04-04 11:15
コントロールは、動的に生成した場合でもaspxファイルにタグとして書いた(静的?)場合でも、クライアントにレスポンスを返した時点で全て無くなります。
で、クライアントからポストバックされた時に、ポストバックされた情報とaspxファイルを突き合わせて、オブジェクトを生成しその状態の設定を勝手にしてくれるわけです。 ですので、「作成したコントロールが消え」るというよりは、生成されないという方がニュアンスとして正しいと思います。 やるとすればいのつちさんのおっしゃるように、「毎回毎回、生成してPage.Controls.Add()で追加」などとするしかないと思います。 これは「どのコントロールが何個どこにある」というのをずっと記憶しておかなければならないので非常に面倒でしょう。 もし個数が決まっているのなら、Visibleをfalseにするという方法が良いのでは。 | ||||
|
投稿日時: 2003-04-05 00:13
ご返答ありがとうございます
とりあえず、個数が決まっているので一郎さんご指摘通り最初に作成しておくことにしました。 ありがとうございました。 | ||||
|
投稿日時: 2004-02-25 20:41
横レスですみません。
では動的に作られた個数の決まっていないコントロールに入力したデータを保持しつづけるにはどうすればいいのでしょうか? | ||||
|
投稿日時: 2004-02-26 00:35
基本的に同じ数だけ「必ず作って」やればいいのですが、セッションやビューステートという手があります。 なお、ポストバックイベントを受けるには、Page_Loadよりも前に作っておく必要があるのではないかと思います。詳しくはイベントの発生順を調べてください。 #初期化→ポストバックデータ受け取り→ビューステート読み込み→ロード | ||||
|
投稿日時: 2004-02-26 20:21
解答ありがとうございます!
やってみます! OnInitで生成するのはどうなんでしょうか・・・ |
1