0

各セルにテキスト ボックスを含むテーブルを動的に作成しています。テーブルはプレースホルダー コントロールに配置されます。すべてが完璧に表示されます。問題は、セルに入力された値を取得するときです。CreateTable() という別のメソッドでテーブルを生成するコードがあります。保存するときにプログラムがプレースホルダーでテーブルを見つけるには、ポストバック イベントと PageLoad イベントで CreateTable() を実行する必要があります。これらの場所の 1 つだけで CreateTable() を呼び出して保存しようとすると、プレースホルダーが空であると表示されるため、テキスト ボックスの内容を保存できません。InitLoad から CreateTable() を呼び出してみましたが、3 つの静的コントロール (ドロップダウン 1 つ、リストボックス 1 つ、カレンダー コントロール 1 つ) から値を参照する必要があるため、うまくいきません。ビューステートがまだレンダリングされているとは思えません。誰にもアイデアはありますか?これを機能させるためだけに、データベース呼び出しの数を 2 倍にする必要がないことは確かに素晴らしいことです。

4

1 に答える 1

0

ViewState と動的コントロールの素晴らしい世界へようこそ :-)

両方 (ViewState と動的コントロール) を使用する場合は、ViewState を再作成する必要があるため、すべての要求でコントロールを再作成する必要があります。コードをコントロール作成コード (CreateTable?) とコントロールを埋めるコード (FillTable?) に分割します。コントロール作成コードの最適な場所は、PageInit イベントです。これは、すべてのリクエストで実行する必要があるコードの一部です。他のコードを必要な場所に配置します (Postback?、LoadEvent?)。コードのこの部分は、一度実行する必要があります。この後、ViewState の一部になります。

コードのコントロール作成部分が ViewState (静的コントロールの値) に依存している場合、より大きな問題が発生します。PageInit で ViewState にアクセスできません。別のストレージ メソッド (SessionState?) を使用して、この情報を保持し、独自のページにリダイレクトします。

于 2010-06-06T09:00:14.140 に答える