0


0

動的に作成されたコントロールの永続化による可視性設定の維持

C#.NETで作成された、やや複雑なカスタムユーザーコントロールがあります。これは基本的にツリー構造です。 コントロールctlGroupには、フィールドのリスト(カスタムユーザーコントロール-ctlFields)と子グループのリストが含まれています。 子グループを含むデータリストは、同じctlGroupコントロールの新しいインスタンスを作成します。これは、各子がフィールドのリストや子のリストなどを持つことができるためです。 うわー。

各グループが持つことができる子の数は有限であり、各子グループはデータベース内のエントリであるため、無限再帰は不可能です。 コントロールは、ポストバックが発生するまで正常に作成され、正常に表示されます。 動的に作成された各コントロールに関連するすべてのデータをポストバック時にかなりうまく保持できましたが、1つの例外があります。 私が問題を抱えているのは、ポストバックを通じてコン​​トロール上の特定のパネルの可視性を維持することです。 各子グループには、ボディの一部を展開したり折りたたんだりするボタンがあります。 この部分は一度折りたたむことができますが、ボタンをもう一度クリックするとすぐに(つまり、 ポストバックが発生する)、コントロールは保持され、以前の表示設定は失われます。

この情報を保存する方法を考え出すのに苦労しているようです。 ビューステートに可視性の状態を保存しようとしましたが、コントロールが再作成されたときにこの情報が引き継がれないようです。

誰もこれを行うためのアイデアを持っていますか? 私は何かが足りないのですか?

編集:データリストで作成されたctlGroupコントロールは再帰呼び出しであるため、動的に作成されることを明確にする必要があります。 私はそれ自体からコントロールを呼び出す他の方法を知りませんが、ここでより良い方法があれば、それを聞きたいです。

1 Answer


0


私のおすすめ:

「拡張」オプションのIDを非表示フィールドに保存します。 彼らは同様に拡張された子供へのリンクを再帰的に持つことができます。 これは、「拡張ノード」ツリー構造になります。 JSONでは、次のようになります(非表示フィールドに文字列として保存されます):

[{
    id: "root1",
    children: [{id: "sub-root1", children: []}, {id: "sub-root2", children: []}]
 },
 {
    id: "root2",
    children: []
 }]

次に、ポストバックで、document.loadイベントにハンドラーをアタッチします( `$ addHandler(document、" load "、function(){…​ } `)は、非表示フィールドのJSONを解析します。 イテレータが展開されたノードにアクセスすると、実際の展開ボタンを「クリック」します(見つかった要素で `.click()`を呼び出します)。 これにより、「拡張された」構造が再構築されます。

HTH