2011-07-07 46 views
2

私は奇妙な問題に遭遇しました。ページを更新するたびに、IsPostBackはfalseです。
私のコンテンツやマスターページに何もこれを引き起こしていないことを確認するために、私は空のWebフォームを作成し、それをデバッグモードで起動しました。まだ、ポストバックでは、私はIsPostBackをfalseに設定しました。IsPostBackは常にfalseを返します

web.configにenableSessionState="true"<sessionState timeout="30" />があります。

それは私をナッツにしている!

更新:私はF5を押してページをリフレッシュします。回答に基づいて、これはポストバックを引き起こすべきではありません。私は使用がページをリフレッシュするとき(手動でさえ)、そしてdbへのいくつかの変更を防ぐことを知りたいと思います。
これには解決策がありますか?

+0

あなたはenableviewstateを持っていますか? – kobe

+3

あなたは 'refresh the page'と言ったら、手動で、ボタンのようなコントロール? – keyboardP

+0

はい、私は 'enableViewstate'をtrueに設定しました – Kamyar

答えて

11

はポストバックではありません。ポストバックは、ボタンがクリックされたとき、ドロップダウンが変更されたとき、またはデータがサーバーに送信されるページ上の他のイベント(HTTP POST、したがって名前 'ポストバック')のときに発生します。

質問がありません手動でページをリフレッシュするのか、ボタンのクリックやその他のイベントを介してサーバーにポストバックするのかを明確にしないでください。

手動でページを更新するため、IsPostBackは常に偽になります。

ASP.NETで(意味での)要求の2つのタイプがあります。

  • 定期的な要求(例えば、ユーザーが最初にページをロードしている)
  • ポストバック(例えば、Aはボタンをクリックしてサーバーにデータを送信)

いずれの場合でもユーザーが以前にページにアクセスしたかどうかを確認するには、自分自身を追跡する必要があります。あなたはこれを行うには、セッション変数を設定することができます。

Session["UserHasVisitedThisPageBefore"] = true; 

次に、あなたがあなたの現在のIsPostBack小切手の代わりにそれを確認することができます:

if(Session["UserHasVisitedThisPageBefore"] != null && (bool)Session["UserHasVisitedThisPageBefore"]) 
{ 
    // stuff here 
} 
+0

答えをありがとう。しかし、セッション状態変数を使用するのは良い選択ではありません。なぜなら、ユーザーがページから離れてナビゲートするときは、必ずそれを削除しなければならないからです。ユーザーがいくつかの他のページに行き、戻っても、私はこれを処理するための最良の選択肢で隠しフィールドを使うと思います。 – Kamyar

5

ページを更新すると、IsPostBackはfalseになります。コントロールがサーバー側のボタンなどのポストバックを引き起こした場合は、これが真となります。

編集 - 更新に応答するには IsPostBackを使用して、データベースを更新するかどうかを判断できます。 falseの場合は、データベースを更新しないでください。それ以外の場合は更新しないでください。 (F5またはブラウザの[更新]ボタンを押して)ページを更新

if(IsPostBack) 
{ 
    //Update DB 
} 
+0

答えをありがとう。しかし、私の問題は、ユーザーがページをリフレッシュしたときで、IsPostbBackは常にfalseでした。カイルの答えは、私はセッション変数を使用する必要が提案した。 +1。 – Kamyar

1

あなたは、基本的にGETリクエストを実行するページを更新するたびにあなたのページ。 GETは、状態サーバーを変更せずにページをロードすることを意味します。 IsPostBack =偽は絶対に正しい行動です!

POSTを実行すると、ポストバックが発生します。その後、サーバー側のフォームが送信されているか、autoPostBackのWebコントロールがトリガーされます。ポストバックが発生します。 IsPostBackが真となります。

2

カウンタのように、ページがリフレッシュされたことを検出するための他のメカニズムが必要なようです。 Viewstate、Session、hidden fields - 多くのオプションがあります。

0

マークアップをレンダリングするXSLを持つ特定のプロジェクトでIsPostBackが常にfalseになるという問題がありました。 .NETのIsPostBackプロパティに頼るのではなく、単にRequest.HttpMethodをチェックしました。

IfPostBackをチェックする必要があれば、代わりにRequest.HttpMethod == "GET"をチェックしました

もし私がIsPostBackをチェックする必要があれば、代わりにRequest.HttpMethod == "POST"をチェックしました

関連する問題