2012-03-19 48 views
6

単純なASP.NETアプリケーションに問題があり、ポストバック後に戻るボタンがあります。ASP.NETブラウザは、「戻る」ボタンの後に「Webページが期限切れになっています」と表示します。

問題のページは単純なフォーム、テキストフィールドなど、ポストバック(自動ポストバック)を行うドロップダウンがあります。

「通常の」フローは、フォームを入力してドロップダウンを変更する場合があります。ドロップダウン値に基づいて、ページの内容が変更される可能性があります。

問題は、ユーザーがドロップダウンを変更してポストバックが完了した後、ユーザーが戻るボタンをクリックしたことです。彼らは、IEからの "Webページが期限切れになっています"というメッセージを見ます。

私は次のように設定しました:

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); 
Response.Cache.SetCacheability(HttpCacheability.Private); 

をしかし、それは問題を釘付けしているようには見えません。プライベート、キャッシュなし::

実際のCache-Controlレスポンス・ヘッダーは、として読み込むだけで「プライベート」のバックボタンののCache-Controlレスポンス・ヘッダーを持つ古典的なASPアプリケーションで

「-クッキーを設定します」 「ポストバック」の後に期待どおりに動作します。

ASP.NETがキャッシュコントロールを明示的に「プライベート」に明示的に設定するよう強制する必要はありますか?または、戻るボタンとポストバックがうまく連携している他のソリューションですか?

ありがとうございます!

答えて

1

あなたが扱っているのは、実際には古い問題です。本質的に、「Webページの有効期限が切れました」というメッセージが表示される理由は、「戻る」ボタンを無効にする技術の1つが採用されていることです。この手法では、過去の日付にキャッシュが設定されているため、ユーザーが「戻る」ボタンをクリックするとブラウザにこのエラーが表示されます。このコード行になり

Response.Cache.SetExpires(DateTime.Now.AddMinutes(-1)); 

これは、他のフレームワークに比べて、理由ポストバックがどのように動作するかの、特にWebフォームASP.NETで、問題となっています。

関連するすべての問題の詳細な説明については、以下のリンク先の記事を読むことを強くおすすめします。それはあなたの質問に直接答えませんが、簡単な答えよりも多くの情報を得ることができ、あなたの選択肢を考え、手元の問題をより深く理解することができます。私はポストバックのように処理されないように、「戻る」ボタンが再び「戻る」ボタンのように動作させる方法についてのアイデアを持っている部品1と2

http://www.4guysfromrolla.com/webtech/111500-1.shtml

を必ずお読みくださいページナビゲーション:

個人的には、ほとんどの自分のアプリケーションでAjaxを使用しているため、postbacl/backボタンの競合が発生しないようにするために、私はUpdatePanelに物事を入れている(間違いなくハッキリな/とにかくこれにより、「戻る」ボタンは実際には同じページではなく、元のページに戻りますが、ポストバックの前と同じようにコントロール値に戻ります。

+0

、キャッシュ制御のプライベートバックをすることができます"期待どおりに"ボタンの動作が有効になりますが、有効期限が-1分に設定され、キャッシュ制御が "private、no-cache:set cookie"に設定されているASP.NETアプリケーションは動作しません。これは私にとっては「no-cache:set cookie」を問題としているようです。 – user505765

+0

私は理解しています。違いは、Classic ASPに対抗するポストバックがないことです。ボタンをクリックすると、フォームの「アクション」がトリガーされ、毎回新しいページロードとなります。 ASP.NETでは、ドロップダウンリストを変更し、そのドロップダウンリストに「autopostback」がtrueに設定されている場合、ブラウザは実際にこれを新しいページのナビゲーションとして認識します。ポストバックがどのように実装されているのかはまったく同じです。このようなケースでは、常時irtritationのソースです。技術的には、自動ポストバック用のドロップダウンセットを変更すると、フォームに「投稿」オプションが表示されますが、Webフォームのパラダイムではそれがぼやけてしまいます。 – David

+0

おそらく、これがより良い説明です - ブラウザには、 WebFormsのパラダイムが開発者にとってそうでないように見せかけたとしても、それは歴史に保存されています。 – David

2

あなたはこのハック/回避策で逃げる可能性がある状況に応じて:それは-1分有効期限を設定し、従来のASPアプリケーションように私にはほとんど意味がない

private void Page_PreRender(object sender, System.EventArgs e) 
    { 
     if (IsPostBack && !IsCallback) 
     { 

      Response.Write("<html><head><script>location.replace('" + Request.Path + "');\n" + "</script></head><body></body></html>\n"); 

      Response.End(); 

     } 

    } 
関連する問題