20

イベントがありButton_clickます。ページを更新している間、前のPostbackイベントが再びトリガーされます。Postbackアクションを防ぐためにページ更新イベントを特定するにはどうすればよいですか?

私はそれを解決するために以下のコードを試しました。実際には、SharePoint ページにビジュアル Web パーツを追加しています。Web パーツの追加はポスト バック イベントであるため、Web パーツをページに追加するたびに !postback は常に false であり、オブジェクト参照が であるため、else ループでエラーが発生しますnull

if (!IsPostBack){
    ViewState["postids"] = System.Guid.NewGuid().ToString();
    Cache["postid"] = ViewState["postids"].ToString();
}
else{
    if (ViewState["postids"].ToString() != Cache["postid"].ToString()){
        IsPageRefresh = true;
    }
    Cache["postid"] = System.Guid.NewGuid().ToString();
    ViewState["postids"] = Cache["postid"].ToString();
}

この問題を解決するにはどうすればよいですか?

4

6 に答える 6

9

here で詳しく説明されているように、ビューステートを使用すると、私にとってははるかにうまく機能しました。基本的:

bool IsPageRefresh = false;

//this section of code checks if the page postback is due to genuine submit by user or by pressing "refresh"
if (!IsPostBack)     
{
    ViewState["ViewStateId"] = System.Guid.NewGuid().ToString();
    Session["SessionId"] = ViewState["ViewStateId"].ToString();
}
else
{
    if (ViewState["ViewStateId"].ToString() != Session["SessionId"].ToString())
    {
        IsPageRefresh = true;
    }

    Session["SessionId"] = System.Guid.NewGuid().ToString();
    ViewState["ViewStateId"] = Session["SessionId"].ToString();
}   
于 2013-09-26T21:44:46.977 に答える
5

この記事はあなたに役立つかもしれません http://www.codeproject.com/Articles/68371/Detecting-Refresh-or-Postback-in-ASP-NET

ビューステートに Guid を追加して、各ページを一意に識別します。このメカニズムは、Page クラス自体にいる場合は正常に機能します。ページ ハンドラーに到達する前にリクエストを識別する必要がある場合は、別のメカニズムを使用する必要があります (ビュー ステートがまだ復元されていないため)。

Page.LoadComplete イベントは、Guid がページに関連付けられているかどうかを確認し、関連付けられていない場合は作成するのに適した場所です。

これをチェックして ください http://shawpnendu.blogspot.in/2009/12/how-to-detect-page-refresh-using-aspnet.html

于 2012-08-03T10:10:10.197 に答える