動的制御に基づくユーザーの可
-
24-09-2019 - |
質問
仮に私が可能、それぞれのtreenode載したidのユーザーで制御できます。ユーザがクリック、ノードでは、これらのコントロールシステムはロードされると、ページがめくれます。として理解しているASPページでライフサイクルの動的制御は追加の初期段階で、可のイベントの火ます。
ここでは、可能クリックイベントが起こった後、追加する必要があり私の制御、どうやって動的に追加の制御に基づくユーザーの可です。
編集:また、提案からArronLS:
私たに追加ノードの値のセッションアレイ、および利用い場合は、initを選択する要素への負荷制御のプレースホルダー。の可能クリックイベント、更新ノードの配列で、クリアなど、旧形のプレースホルダや新形素子を制御できます。のページが読み込まれまで現在のノードinitでviewstateの問題を回避する.
現いたことだが、私の現在の生活を形作って 類似のポスト この問題が、その結果をviewstate.締役へのインセンティブ付与解決する世論調査のRequest[]一部のコンテキスト(その場合は、dropboxのInit制御は手動で取り扱いの可可能です。
私の質問は、 どのようにアクセスの選択したノードを可能に配列の要求?
解決
のinitのコントロールをロードしないの結果は、ビューステートのプロパティへの変更がある場合、これらはコントロールに持続し得ないということです。ページの最初のリクエストに応じて、あなたが動的に初期化してコントロールを作成する場合たとえば、あなたがINITで再びそれらを作成ポスト背面に、そして初期化した後、ビューステートのgetのいずれかのプロパティ値をコントロールに適用されます。
あなたがツリービューのクリックイベントで最初にコントロールを作成した場合、それが作成されたばかりのため、コントロールに適用するために蓄積された任意のビューステートがまだ存在していないため、だから、私は、それは問題ないはずですよね。これがないビューステート保存するように制御する原因となります場合は、私はわかりません。あなたはそれを試してみる必要があると思います。
あなたが最初にして、前に一度コントロールを作成したことを「記憶」にはいくつかのメカニズムが必要になりますので、は最初の後、後続のポストバックでは、今、あなたは、それに適用する累積viestateのためのinitでコントロールを作成する必要がありますその後のポストバックのclickイベントに応答し、その後は、initで再びコントロールを作成します。あなたはそれを知らなかった場合は、それぞれのリクエストに応じてコントロールを再作成する必要があります。
質問だから、コントロールのビューステートがいかに重要であるかになります。
編集:私も、これはビューステートにどのように影響するか以外の他の結果が存在することになるならば、私は完全にわからないことを追加します。
他のヒント
これはあなたの直接の質問への答えではないかもしれないが、私は自分自身を答えを見つけたことがありませんから、ここで私が使用した回避策です。
ツリービューで作業するとき、私はいつも使用してきたアプローチは、IDに基づいてデータを一度aspxページ内のコントロールを宣言し、その後、クリックイベントにすることで、バインドコントロール。必要な場合は、最初に「偽」目に見える=への可視性を設定し、結合した場合、それを変更することができます。それはあなたが記述しているだけで難問を避けるため、このアプローチはうまく動作します。
あなたはツリービュー、A ネストされたリピータのアプローチの作品をあきらめるに反対していない場合まあ、あまりにます。
ただ、いくつかのより多くのフィードバックを得ることを期待して、別の考えを投げ...
Iは、セッション・アレイ内の選択された値を定義し、それ自体にリダイレクトするページを強制的にポストバックイベントを使用することができます。イベントハンドラが発射した後に続いて、ユーザーが見ているinitが効果的に行われます。
私は何か他のもののために望んでいるので、は、悪いアイデアだと思います。
あなたは各ツリーノードに対して示すさまざまなコンテンツが欲しいです。 私はtheresのに左のツリービューと途中でいくつかのコンテンツ領域を想定しています。
UIの観点から、私は通常、個々のビューが必要なコンテンツを持つ別々のUserControlでマルチビューを使用してこれを解決します。ツリーノードのクリックイベントは、単にマルチビューActiveIndexは、ノードの値のプロパティに含まれる変更(IDがのDataItemに保存されている)とは、単にコンテンツ領域を切り替えます。
一般的に、ツリーノードが動的に生成されていても、例えばデータから、唯一のこれまであなたが定義する必要があることを「ノード・ビュー」のUserControlの有限量があるでしょう。
注。 MultiViewコントロールを使用しているときのdontので、含まれているすべてのビューは、ページのライフサイクル中にロードされるように注意してください。
などをPage_Loadにどんな「重いリフティング」を置きますこれは、選択されたノードのIDもInitイベント中に、常にRequest.Form
コレクションからアクセス可能なフォーム値として渡されることを覚えておくことが役立つかもしれません。キーはctl00_Content1_TreeView1_SelectedNode
ようなものになるだろう。あなたはRequest.Form["__EVENTARGUMENT"]
を見ても、それが実際にポストバックを発生させたツリービューだったことを確認するためにRequest.Form["__EVENTTARGET"]
を使用したいと思うので、しかし、それだけでIDはおそらく、あなたが必要値を取得しません。
を超える可能性が高いあなたはFormコレクションを引き出すことができ、必要な情報。これは、ブレークポイントを設定し、値を調べるだけです。この種のコードは常にひどくハック感じていますが、Page_Init中に何かをする形で提出された値を使用する必要がある場合、この場合、あなただけ処理するTreeViewコントロールのイベントを待つことはできません。だけではなく、厳密に型指定されたプロパティとうまくそれをすべてをパッケージ化する.NETのを待つのフォームの値を見ることを恐れてはいけません。それまでにそれは手遅れになります。