3

TempData を使用してユーザーにメッセージを表示しています。文字列を TempData に入れ、後でその文字列を読み取り、それが空でない場合は、メッセージを含む DIV を表示します。

すべて正常に動作し、ユーザーがページを更新してもメッセージは表示されません (これが私の望みです)。問題は、ユーザーが他のページに移動してブラウザの戻るボタンを押すと、メッセージが再び表示されることです。これは望ましくありません。

この動作を回避するにはどうすればよいですか?

ありがとう。

これは、TempData (Razor + VB) を読み取るために使用するコードです。DIV #commonMessage があります。このコードでは、文字列を div 内に配置して表示します。前に言ったように、それは機能していますが、唯一の問題は、ユーザーがブラウザーでクリックして戻ると、TempData がまだそこにあることです。

 @If Not IsNothing(TempData("MessageUser")) AndAlso TempData("MessageUser") <> String.Empty Then
        Dim str As String = TempData("MessageUser")
        @<script type="text/javascript">
             $(document).ready(function () {
                 $('#commonMessage').html("@str");
                 $('#commonMessage').delay(400).slideDown(400).delay(4000).slideUp(400);
             })
        </script>
    End If

編集: TempData がキャッチされているようです。なぜなら、メッセージを表示しているアクションのキャッシュを無効にすると (属性を使用してSystem.Web.Mvc.OutputCache(NoStore:=True, Duration:=0, VaryByParam:="*"))、問題が消えるからです。しかし、キャッシュを無効にする必要のない方法を見つけることができればよいのですが...

要求された編集: 私は ASP では非常に初心者なので、何をしようとしているのかを明確にしようとしています。ユーザーがアクション (たとえば、クライアントの編集) を実行すると、クライアントをクライアント リスト ページにリダイレクトし、ユーザーに「クライアント データが更新されました」というメッセージを表示します。メッセージが一度だけ表示されるようにしようとしています。おそらく、TempData は正しい方法ではありません (私はまだ学習しているのでわかりません) が、ターゲットはユーザーにメッセージを 1 回だけ表示することです (urser が更新された場合でも、ユーザーがアクセスした場合でも)。他のページを開き、ブラウザで押し戻します)... TempData を使用するか、目的により適したものを使用します。

4

1 に答える 1

1

本質的には、TempData が目的に応じて適切なツールを使用するのではなく、目的を達成することを望んでいます。

TempData は、設計上、HTTP リダイレクトでデータをキャッシュするために使用することを目的としています。そのために存在しています。これがあなたが使用しているシナリオであるかどうかは、あなたの投稿からは明らかではありません。

すなわち:

ユーザーに表示される、TempData のデータを使用したページのリダイレクト。表示されたページを更新すると、TempData はもう存在しません (リダイレクトはなく、更新のみです)。

ユーザーが別のページに移動して [戻る] ボタンを使用すると、ブラウザーはページの html をキャッシュし、それを再表示します。それが正しい振る舞いです。

また、あなたのテストでは、あなたは間違っていると思います。つまり、キャッシュを無効にすると、TempData が完全に失われ、正しい動作が得られなくなります。つまり、戻るボタンを押したときだけでなく、メッセージが表示されることはありません。

あなたのjQueryは非効率に見えます。あなたはそれがする必要のないことをさせています。かみそりを使用して、div にメッセージを入力できます。div を非表示に設定します。つまり、次のようにします。

<div id="commonMessage" style="display:none;">

次に、jQuery を使用して表示します。

$('#commonMessage').show();

あなたの投稿はそれほど明確ではありませんが、要約すると、あなたがすべきことを見ていると言えます。

おそらく、編集で、アプリに何をさせたいかを記述する必要があります。そうすれば、答えやすくなります。現状では、あなたは私たちに何が起こったのか、あなたの見解に何を考えているのかを語ってくれましたが、あなたが何を期待しているのかは明確ではありません.

また、TempData についてもよく理解する必要があります。これは、コントローラーのアクション間、つまりリダイレクトが発生したときにのみ保持されます。あなたが言及したキャッシュ属性の影響を受けると思われるセッションストアにデータを保存します。

于 2011-07-11T12:16:50.457 に答える