3

私が問題を抱えていることを示す簡単な例を作成しました。ページにasp.netチェックボックスを配置し、同じページにasp.netテキストボックスを配置します。コード ビハインド (vb.net を使用) に、チェック ボックスがオンの場合はテキスト ボックスに何かを表示し、チェック ボックスがオフの場合は空のテキスト ボックスを表示するコードを配置します。シンプルですね。チェックボックスをオン/オフし、テキストボックスにコンテンツがある/コンテンツがない状態で、何度か切り替えます。すべて正常に動作します。

ここで、ブラウザの戻るボタンを数回クリックします。戻るボタンをクリックするたびに表示される結果は反対です - チェックボックスはチェックされていますが、テキストボックスには何もありません。チェックボックスがオフで、テキストボックスにテキストがあります。vb コード (ページの読み込み、checkedchanged) をどこに配置しても同じ結果になります。

ページがキャッシュに保存されるタイミングと関係があると思います。チェックマークが「クリック」イベントを発生させている間、ページのようなものがキャッシュに保存されていますが、テキストボックスを埋めるコードはまだ発生していません。それからまた、私は完全に的を外している可能性があり、私が間違っているのは本当に単純なことです。

アイデア/考え/助けをいただければ幸いです。

サンプルコード:

ASPX:

<asp:CheckBox id="ChkBox1" runat="server" AutoPostBack="True" text="Sample" /><br />
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>

VB:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        If ChkBox1.Checked = True Then
            TextBox1.Text = "Checked"
        Else
            TextBox1.Text = ""
        End If
    End Sub
4

1 に答える 1

4

これはあるべき姿です。

ブラウザは、サーバーにポストバックするたびに覚えています。チェックボックスの状態が変化するたびに、ページがポストバックされます。

チェックボックスの状態がチェックされている場合、テキストボックスは実際には空です。これは、ポストバックが発生したときです。サーバー側のコードによってテキスト値が設定され、ブラウザに表示されます。

しかし、あなたの背中はあなたが送信したもの、つまりチェックボックスと空のテキストを覚えています。

チェックを外すとリザーブケースが発生します。

これらのバック ページの 1 つを F5 キーで更新すると、ブラウザは投稿データを送り返すよう要求するはずです。そして、あなたは期待された状態に戻ります。

ブラウザーにコンテンツをキャッシュしないように指示します (ブラウザーにコンテンツを忘れさせたい場合): VB コードではありませんが、VB.net でも同様の機能を見つけることができると確信しています。

context.Response.Cache.SetExpires(DateTime.UtcNow.AddMinutes(-1));
context.Response.Cache.SetCacheability(HttpCacheability.NoCache);
context.Response.Cache.SetNoStore();
于 2012-07-05T11:19:52.403 に答える