5

このことを考慮 -

エンドユーザーが詳細を取得することで、ASP.Netページにタブコントロールを動的に作成できるようにします。追加されたすべてのタブについて、いくつかの設定を取得します-

  1. タブタイトル
  2. タブコンテンツ
  3. タブフッターリンク

したがって、タブごとにこれらの詳細を取得します。ユーザーには、もう1つのタブに[タブを追加]ボタンが表示されます。したがって、タブ設定を取得するには、ページにもう1つのタブ設定パネルを追加する必要があります。ただし、そうすると、以前に作成した動的タブ設定パネルに入力した値が失われます。ユーザーは、タブをいくつでも追加して、タブごとに設定を入力できます。最後に、彼らがそれを保存するとき、私は(彼らの設定と内容に基づいて)タブコントロールを構築し、コントロールをレンダリングします。

コントロールは動的なので、2つのオプションがあります-

  1. n番目のタブを追加しながら、以前に作成したn-1タブ設定パネルを再作成します。したがって、すべてのポストバックで、すべてのタブの設定パネルを再作成する必要があります。しかし、この場合の値を永続化する方法がわかりません。
  2. 単純なhtmlコントロールを使用してクライアント側に設定パネルを追加し、ページのUnLoadでコントロールを解析します->設定を解析します->非表示フィールドに保存します->サーバー側で取得します。この場合、コントロールの検証スクリプトを作成する必要があるサーバー側の機能がすべて失われます。

これを行うためのより良い洞察はありますか?

4

3 に答える 3

2

コントロールをサーバー側に追加しますが、ポストバックごとにすべてのコントロールを再作成する必要があることを覚えておいてください

ビューステートで作成する必要のあるコントロールの詳細を保存してから、CreateChildControlsのコントロールツリーからコントロールツリーを構築できます。

于 2011-03-25T12:47:54.147 に答える
1

1つの方法は、ViewStateでタブを再作成するために必要なデータを保存することです。たとえば、PreRenderイベント中にこれを行うことができます。ポストバックでは、元のIDと階層内の順序を維持しながら、元のコントロールを再作成する必要があります。これは、LoadViewStateフェーズで実行できます。

Page_Loadに入ると、新しいタブを作成できます

于 2011-03-25T12:49:08.030 に答える
0

私は過去にオプション#1を実装しました。ページイベントライフシクルの特定の時点でコントロールツリーを再作成する必要があります。これにより、ビューステートを復元するビューイベントが開始されたときに、必要なすべてのコントロールが含まれるようになります。私が覚えている限り、クライアントに送信する前に、ページがレンダリングされ、表示が保持されたときに存在していたのとまったく同じ階層と同じ名前のすべてのコントロールを復元する必要もあります。不一致がある場合、ビューステートのロードは動的コントロールでは機能しません。

于 2011-03-25T12:41:55.680 に答える