0

カスタムユーザーコントロール(ボタン)を含むカスタムテンプレートコントロール(ツールバー)があります。ボタンはjqueryを使用して、状態/ポストバック/非=ポストバックなどのスタイルと管理を行います.

いくつかのボタンはプレースホルダーで隠され、ボタンの 1 つを押すと表示されます。

jquery に関するすべてのボタンは、ポストバック (PageRequestManager を使用する UpdatePanel 内の ajax スタイル) で開始されるように見えますが、プレースホルダーによって非表示にされたボタンではビューステートが失われます。

テンプレート化されたコントロールのプレースホルダーのビューステートとボタンに固有の問題のようです。これは通常、非 ajax 環境で機能します。何かが足りないのではないかと思います。

私に考えさせてくれるコメントは大歓迎です。

コードはさまざまな部分にあり、完全に切断されるため、おそらく貼り付ける価値はありません(これは役に立たないことはわかっています)

4

2 に答える 2

0

私の記憶が正しければ、ASP.NET コントロールは、visible が false に設定されているとライフ サイクルを終了しません。つまり、Render() などは呼び出されず、ViewState はそれらのいずれかである必要があります (これは理にかなっています)。AJAX/Javascript と一緒に更新パネルを使用することも非常に難しい作業であり、うまく機能しません。これは、ASP.NET コントロールと更新パネルが機能する方法です。

私の提案は、更新パネルを使用するか、JavaScript を使用することです。両方を使用することはできません。

jquery の $.post/get を使用し、コードのセクションを Web サービス呼び出しから返された html に置き換えることで、更新パネルの動作を簡単にエミュレートできます。

function myButtonClick(event){
    $.post("path/to/webservice", {data1: "data1"}, function(data, status){
        $("#myPanel").replaceWith(data);
    });
}

更新パネルを介して更新されるコードに JS が関連付けられている場合、最終的には他の問題にも遭遇します。例: ASP.NET AJAX コントロール ツールキット コントロールの 1 つなど、それぞれに JS がアタッチされている項目のリストがあり、更新パネルを使用してページからこれらの 1 つを削除すると、JS はコントロールが同期しなくなります。

于 2009-11-10T14:17:30.320 に答える
0

ここで自分の質問に答える必要があると感じています:

CSS で PlaceHolders または div を使用する代わりに、レンダリング オプションに応じて、UpdatePanels が div またはスパンのいずれかでレンダリングされます。この場合、新しい外部コンテナーを非表示/表示しようとするのではなく、UpdatePanel が作成する div またはスパンを非表示にするだけです。

于 2009-11-27T19:50:18.770 に答える