2

VBとAjaxを使用して動作するWebアプリケーションがあります。サーバーへのポストバックでの苛立たしい「ちらつき」を避けるために、updatepanelsを使用しています。

updatepanel自体の中でボタンコントロールを定義して(外に移動しようとしたところ、壊滅的なエラーが発生したため、そのままにしておきます)、現在のパネルを表示せず、兄弟パネルを表示したいと思います。これは、ボタンを2回クリックする必要があることを除いて機能します。ダブルクリックではなく、もう一度クリックするよりも1回クリックした。

ブレークポイントを設定する際に、ボタンにアタッチされている背後のコードが実際には最初のクリックで実行されていることを発見しましたが、パネルが期待どおりに切り替わりません。同じボタンをクリックするか、さらに悪いことに、別のボタンをクリックすると、2番目のパネルが表示されるという予期された動作が発生します。ただし、2番目のボタンがクリックされると、3番目のパネルが表示され、2番目のボタンがクリックされたために3番目のパネルが表示されるという不要なボーナスがあります。

この動作は、updatepanelとそのAjaxの性質によるものだと思います。2回目のクリックを回避する方法はありますか?アップデートパネルを誤用していますか?モーダルポップアップ(AjaxToolKitからすぐに)を使用したかったのですが、データのポストバックに問題があったため、このアプローチを選択しました。これは私を十分長い間悩ませてきたので、どんな洞察、援助、さらには批判も歓迎されるでしょう。ありがとう

4

8 に答える 8

1

UpdatePanelsを削除した場合、PostBacksで期待どおりに機能しますか?Page_Loadまたはチェーンの上位にある他のイベントで、クリックイベントに到達する前に何らかの方法で何かを「リセット」している可能性があります。これは本当でしょうか?

于 2008-09-04T18:50:15.010 に答える
1

あなたの問題は、メソッドの実行後に更新パネルだけがサーバーからデータを受信して​​いることだと思います。変更しようとしているパネルは更新パネルの外にあるため、プロパティが変更されたことを認識していません。

ページ全体のポストバックを行うか、変更するパネルを更新パネル内に配置する必要があります。

于 2008-09-05T19:01:26.250 に答える
0

私は以前にこれに遭遇してそれを解決しました、私はどうやってそれを思い出せません。私は私の古いコードを見つけてあなたに返事をしようとします。スクリプトマネージャでEnablePartialRenderingを有効にしていますか?両方のコンテナを3番目のパネルでラップしてみてください。

于 2008-09-04T18:54:14.000 に答える
0

あなたの更新パネルは他のパネルの中にあります。

それは逆であるべきですか?私の知る限り、更新パネル内のコントロールのみが AJAX 呼び出しを介して更新されます。

于 2008-09-04T19:29:33.573 に答える
0

これはかなり簡単な解決策です。(今朝も同じ症状でした。)

UpdatePanel は、それ自体の外部にあるものをレンダリングできません。お気づきのとおり、更新は行われていますが、結果は表示されていません。

最も簡単な解決策は、完全なポストバックを強制することです。次のようにできます。

protected override void OnInit(EventArgs e)
{
    var scriptManager = ScriptManager.GetCurrent(this);
    // or this.Page in a UserControl, etc.

    scriptManager.RegisterPostBackControl(someButton);
    scriptManager.RegisterPostBackControl(someOtherButton);
    // etc. for each control that needs to update something outside the UpdatePanel
}

これにより、Ajax によって UpdatePanel でボタン自体を更新することができます (たとえば、ボタンの状態を無効または有効に変更するなど)。ボタンがクリックされた場合にのみ、完全なポストバックが発生します。

于 2008-11-03T16:24:31.843 に答える
0

他の人が言ったように、更新パネルはそのコンテンツのみを更新します。これは、それを使用する主な利点の 1 つです。

ボタン クリック メソッドを機能させるには、Panel2 と pnlPrvCmt を更新パネル内に配置する必要があります。もう 1 つのオプションは、Panel2 を 1 つの更新パネル内に配置し、pnlPrvCmt を 2 番目の更新パネル内に配置することです。次に、いずれかの更新パネル内の任意のコントロールにより、UpdateMode=Always (既定では常に) である限り、両方が更新されます。

于 2008-11-06T16:54:34.090 に答える
0

ダイナミック コントロールの作成時に ID を指定してみてください。
何らかの理由で、動的コントロールがこのコンテキストで機能するために、.net でこれが必要になります。

myControl.id="newID"
于 2013-12-19T05:23:34.720 に答える