1

現在、多数の動的にレンダリングされたページを含む高度な Web アプリケーションに取り組んでいます。ページは、Xml と Xslt の組み合わせからメイン コンテンツがレンダリングされるプレース ホルダーを含む標準ページです。

私は最近、ASP.Net Ajax Toolkit の折りたたみ可能なエンテンダーを追加して、動的にレンダリングされるパネルの折りたたみと拡張を可能にしようとしています。メインの xslt テンプレートにエクステンダー マークアップを追加しましたが、すべて問題ありません。ポストバックが行われ、パネルが初期状態に戻るまでは問題ありません。したがって、たとえば、パネルが折りたたまれた状態でページをロードすると、ポストバック後にページが開いているパネルをリセットできません。問題は、ビューステート自体に動的コンテンツを保存し、ページがロードされるとすぐに発生するという事実によって引き起こされます。 Xml を再レンダリングするのではなく、viewstate から取得します。

ふぅ……問題の背景があります。

今、主な質問です。Javascriptでエクステンダーとやり取りするにはどうすればよいですか。ページ変数のクライアント側で状態をキャッシュし、ポストバック後に状態を再適用できると確信するのに何日も費やしました。ただし、これを達成する方法に関するドキュメントや知識はないようです。私が見つけた最高のものは、パネルが拡張または折りたたまれたときにキャッチするイベントをいくつか登録できる非常に単純な JavaScript です。

私がやりたいのは、各パネルの状態をやり取りしてキャッシュすることだけです。誰でも何か提案できますか?

4

1 に答える 1

0

OK、他の誰かが同様のことを達成する必要がある場合に備えて、私は今それを機能させました。

多くの調査の結果、ここで説明されているいずれかの方法を使用して、いくつかのクライアント側イベントに接続できることがわかりました。

そこで、Page_Load() イベントでいくつかの非表示フィールド (ASP.Net HiddenField) をプログラムでページに追加し、各エクステンダーの名前を区切り文字列として 1 つのフィールドに追加してから、1 つのフィールドごとに 1 つのフィールドを作成するのが最善の方法であると判断しました。エクステンダーの状態を保持するためのエクステンダー。ページがポストバックされると、エクステンダーの各隠しフィールドの値が Request.Form オブジェクト (キーは隠しフィールド ID) から取得されます。それ以外の場合は、初期ロードの場合はデフォルト値を処理します。

次に、onExpand および onCollapse イベントを処理し、特定のエクステンダー隠しフィールドの値を更新する単純なクライアント側スクリプトを作成しました。

クライアント スクリプトの pageLoad イベントで、隠しフィールドの値に基づいてエンテンダーの状態を設定しました。

本当に簡単です....最初からそのように考えるべきでした!

于 2009-08-06T11:16:43.260 に答える