1

問題があるようで、解決策が見つかりません....ASP.NET 検索フォームがあり、ユーザーが結果をクリックしてからブラウザーの戻るボタンをクリックすると、ユーザーは次のようなページに移動します。 「ウェブページの有効期限が切れました」

私はそれがキャッシュの問題であることを知っています。これは私が試したことです...

protected void Page_Init(object sender, EventArgs e)
{
    Response.AppendHeader("Cache-Control", "no-cache"); 
}

protected void Page_Init(object sender, EventArgs e)
{
    Response.AppendHeader("Cache-Control", "no-cache, no-store, must-revalidate");
    Response.AppendHeader("Pragma", "no-cache");
    Response.AppendHeader("Expires", "0");
}

これらの解決策はどれも機能していないようですが、理由は誰にも分かりますか?

私もこれを試しました...

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

しかし、うまくいきませんでした。

もう少し掘り下げて、Fiddler を使用してヘッダーをチェックしたところ、Cache-Control: private, no-store, must-revalidateどこにも Cache-Control を非公開に設定していないことがわかりました...私が持っているのはインポートだけです。私のインポートの 1 つに Cache-Control がある可能性はありますか?それらの中で?

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

using CMS.UIControls;
using CMS.GlobalHelper;
using CMS.CMSHelper;
using CMS.Controls;
4

2 に答える 2

6

問題

この問題は、キャッシュ制御ヘッダーとは関係ありません。キャッシュされたヘッダーの有無にかかわらず、検索結果ページで同様のエラーが表示されます。

ここでの問題は、検索フォームが Http POST 経由で送信されていることです。これは、検索フィールドが POST 本文の一部としてサーバーに送信されていることを意味します。ブラウザーは、これをフォーム送信のように表示します (連絡先ページの送信のように考えてください)。ブラウザには、同じフォームを何度も再投稿するのを防ぐメカニズムが組み込まれています。これは、経験の浅いユーザーが知らないうちに誤ってこれを行う可能性があるためです。

たとえば、会社の電子メールを送信する連絡フォームがあるとします。ユーザーがフォームを POST してメッセージを送信し、[戻る]、[進む]、[戻る]、[進む]、[戻る]、[進む] の順にクリックすると、フォームの 3 部または 4 部のコピーを受け取りたくない場合があります。同じメッセージ。そのため、フォーム POST の結果であるページに戻ると、ブラウザーは警告を表示します (一部のブラウザーでは「再送信」をクリックできますが、これは望ましくありません)。

解決

わかりましたので、答えは何ですか?Http GET メソッドを介して検索クエリを送信する必要があります。これにより、通常、検索結果ページのクエリ文字列に検索文字列が表示されます。たとえば、Google はほとんどの場合、検索文字列をクエリ文字列変数 'q' にエンコードします。「SearchResults.aspx?q=Test%20Phrase」のようなページがあるかもしれません。検索フレーズが (ページ URL の一部として) クエリ文字列で提供され、POST 本文では提供されていないことに注意してください。

ASP.net の投稿中心の方法でこれを達成する方法の詳細については、この stackoverflow の投稿を確認してください。@Solburn が提供する例は、この投稿の時点での最良の例です。

于 2012-07-30T04:21:14.797 に答える
0

すでに BenSwayne はその質問に完璧に答えています。それに加えて。これは、.Net Eg の ImageButton コントロールを使用する場合によくある問題です。

<asp:ImageButton ID="ibnDisplayImage" runat="server" ImageUrl="test.jpg" 
PostBackUrl="~/home.aspx" />

したがって、この問題を回避するには. 以下のコードを使用します。

<a href="~/home.aspx"><img src="test.jpg" /> </a>

また

<asp:HyperLink ID="lnkDisplayImage" runat="server" NavigateUrl="~/home.aspx" > <asp:Image ID="imgDisplayImage" runat="server" ImageUrl="test.jpg" /> </asp:HyperLink>
于 2012-08-21T15:39:58.330 に答える