5

コードビハインドでポストバックまたはページのリロードを強制する方法が必要です。いくつかのJavaScriptを使用しようとしましたが、うまくいきませんでした。ネットをブラウジングすると、最初の質問は「なぜ」ですか?

状況は、自動ポストバックにドロップダウン リストがあり、グリッドビュー データソースの選択パラメーターがそのドロップダウン リストの選択された値から派生しているということです。そのため、ページは正常に機能し、選択したアイテムが変更されるたびにコンテンツが更新されます。しかし、一部のリンクやボタンは顧客をページから外してしまうため、後でリンクし直します。

アイデアは、セッションの最後の選択を保存し、セッション オプションがデフォルト以外の場合は最初の page.load イベントをチェックすることです。それに基づいてドロップダウンリストのselectedindexを変更できるようになりましたが、どうやらデータソースはpage.loadよりも速くトリガーされるため、リロードを強制できない限り、これは役に立ちません。

何か案は?もちろん、ページ全体のポストバック/リロードが唯一のオプションではありません。グリッドビュー/データソースを強制的に更新するだけで十分です。ページ全体をリロードする以外に、それを行う方法がわかりません。

ありがとう。

4

6 に答える 6

9

ページにajaxタイマーを設定し、戻ってきたときに有効にして、ページがレンダリングされるとすぐにOnTick自動ポストバックを発生させてから無効にすることができますが、正直なところ、これは些細な問題の恐ろしい回避策です。

ドロップダウンリストの値をプログラムで変更した後、GridViewを再バインドできないのはなぜですか。たとえば、タイムラインは次のようになります。

  • 人がページに戻る(ポストバックではない)
  • GridViewはデフォルト値でバインドします
  • ページの読み込み
    • セッション変数を確認してください
    • 値が見つかった場合
    • DropDownListの選択値を設定します
    • .DataBind()GridView / DataSourceを再度呼び出して、強制的に再バインドします。
于 2009-05-27T10:06:01.687 に答える
2

別のページのイベントを使用できないのはなぜですか?PreRenderCompleteを試しましたか?ポストバックでは、イベントの順序が重要であることを忘れないでください。PreRenderCompleteは、ページがレンダリングされる前に呼び出される最後のイベントです。Page_Loadは実際には中間のどこかにあります。

私は仕事でいつもこういうことをしています。

Protected Sub Page_PreRenderComplete(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.PreRenderComplete
    Session("Value") = ddlList.SelectedValue
End Sub

そのコードはおそらく正しくありませんが、それはあなたにイベントのアイデアを与えるだけです。

于 2009-05-27T10:19:59.723 に答える
1

GridViewのDataBindingイベントを処理し、そのハンドラーのSessionの値を確認してみませんか?ドロップダウンリストパラメータと等しくない場合は、変更してデータバインディングに任せることができます。

データソースコントロールのSelectCommandを変更するより一般的なサンプルについては、ここで私の回答を参照してください。同様に、ControlParameterの値を変更できるはずです。この答えは同じですが、(ネストされた)リピーターの場合です。

これが機能しない場合は、Eoinの答えが最善の方法です(GridViewを再バインドします)。

于 2009-05-27T10:28:37.023 に答える
0

response.redirect("~/ImOnThisPageAlready");別の方法として、同じページへの投稿をまだ探している場合があり ます。
とてもシンプルで、あなたのサイトがどれほど忙しいかはわかりませんが、私の小さなアプリケーションでは非常に速く動作します.

于 2012-03-27T22:39:39.537 に答える
0

みんな助けてくれてありがとう。私はセレブラスの提案に従おうとしましたが、同僚が別のアイデアを提案しました。以下のように、コメント行がコメントなしの行に置き換えられました。

<パラメーターの選択>
   <%--<asp:Parameter Name="timevalue" Type="String" DefaultValue="now" />--%>
   <asp:ControlParameter ControlID="timevalueDropDownList" PropertyName="SelectedValue" Name="timevalue" DefaultValue="now" />
</SelectParameters>

それ以外は、最初の投稿のすべてが当てはまります。pageload でセッションをチェックし、以前と同じように変更を timevalueDropDownList に適用しました。セッションは SelectedIndexChanged イベントなどで常に更新されていました。

しかし、いつものように、良いアイデアと回答があり、今後同様の問題でこれらを参照するようにします. 私はこれらをたくさん持っていましたが、それらを回避する他の方法を見つけたので、今は必要ないかもしれません. ;)

于 2009-05-27T11:08:31.217 に答える
0

同様の問題がありました...Kezzerの修正がうまくいきました。

ただ置く:

Chart1.databind()

コード ビハインドの PreRenderComplete イベントで。

PreRender complete はチャートがレンダリングされる前の最後の処理として実行されるため、ここでチャートを「バインド」すると、ドロップダウンで視覚的に「表示」されているものが実際にチャートをレンダリングするための値として使用されることが保証されます。 .

私たちの問題は、自動ポストバック カスケード ドロップダウンにありました。国、州、都市のドロップダウンがありました。ユーザーが「United States」、「Ohio」、「Clevland」を選択した場合、すべて正常に機能しましたが、国を「France」に変更すると、ドロップダウンに auto があったとしても、グラフにエラーが発生します。この変更に合わせて調整し、都道府県と市区町村を利用可能な最初の値にリセットします。

PreRenderComplete に autopostback を追加すると、チャートは強制的に「取得: ドロップダウンが自動修正された後の値...素晴らしい!

于 2011-06-08T20:01:53.473 に答える