2011-07-07 13 views
5

ユーザーがページを更新するためにF5キーを押したかどうかを確認するにはどうすればよいですか?ページを更新すると、質問カウンタは増加しません。私は数十のチュートリアルで言及されている多くのコードスニペットをテストしましたが、正しく動作しませんでした。ブラウザの更新を検出する

空白のWebフォームがあり、ユーザーがクライアント側でF5キーを押しているかどうかを確認したいとします(リフレッシュしないようにします)。

私はセッション変数を使用できますが、ユーザーが自分のサイトの別のページに移動して戻ってきた場合は、リフレッシュではなく新しい訪問と見なしたいと思います。したがって、これはセッションスコープ変数ではありません。

ありがとうございました。

アップデート:私は見つけることができる唯一の回避策は、以下のようにloadメソッドをオーバーライドし、ベースページから私のページを継承することでした:

public class PageBase : System.Web.UI.Page 
{ 
    protected override void OnLoad(EventArgs e) 
    { 
     base.OnLoad(e); 
     this.Session["LastViewedPage"] = Request.RawUrl; 
    } 
} 

とすべてのページで、私はこの場合は知って興味があった場合にはリフレッシュです:

if (this.Session["LastViewedPage"].ToString() == Request.RawUrl) 
{ 
    // This is a refresh! 
} 
+1

あなたは「セッション変数を使用できます」と言っているのは、最後に訪問したページを保存するだけではいかがですか? – tomfumb

+0

私はすべてのページにそれを保存する必要があります。実際には、基本ページを使用するのは悪い考えではないかもしれません... – Kamyar

答えて

1

だけ必ず解決策がa redirect to the same pageを作ることであり、ここでは同様の質問です:Post-Redirect-Get with ASP.NET

しかし、そこにいくつかの他のトリックは、ページ上のいくつかのチケットを追加することによって、またあると、これが同じであるかの変化を持っているかどうかを確認し、でフル例およびコードを参照してください。

http://www.codeproject.com/Articles/68371/Detecting-Refresh-or-Postback-in-ASP-NET

と1以上:

http://dotnetslackers.com/community/blogs/simoneb/archive/2007/01/06/Using-an-HttpModule-to-detect-page-refresh.aspx

+0

運が悪い場合でも両方を試してみてください。 – Kamyar

+0

「同じページにリダイレクトする」と説明してください。 – Kamyar

+0

@kamyar私はcodeprojectのアイデアをいくつかの余分なコードで使用していますが、必ずしも働くとは限りません...複雑です。私は、リダイレクトが役に立つメッセージデータをたくさん失うことを知っています...私は知っています... – Aristos

4

私はこの問題に遭遇し、次のコードを使用します。それは私のためにうまくいく。

bool isPageRefreshed = false; 

protected void Page_Load(object sender, EventArgs args) 
{ 
    if (!IsPostBack) 
    { 
     ViewState["ViewStateId"] = System.Guid.NewGuid().ToString(); 
     Session["SessionId"] = ViewState["ViewStateId"].ToString(); 
    } 
    else 
    { 
     if (ViewState["ViewStateId"].ToString() != Session["SessionId"].ToString()) 
     { 
      isPageRefreshed = true; 
     } 

     Session["SessionId"] = System.Guid.NewGuid().ToString(); 
     ViewState["ViewStateId"] = Session["SessionId"].ToString(); 
    } 
} 
関連する問題