3

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

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

それは私を狂わせています!

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

4

5 に答える 5

11

ページの更新(F5ブラウザのまたは更新ボタンを押す)は、ポストバックではありません。ポストバックは、ボタンがクリックされたとき、ドロップダウンが変更されたとき、またはデータがサーバーに送信される原因となるページ上のその他のイベント(HTTP POSTを介して、したがって「ポストバック」という名前)で発生します。

あなたの質問では、ページを手動で更新するのか、ボタンクリックやその他のイベントを介してサーバーにポストバックするのかが明確になりません。

ページを手動で更新しているため、IsPostBack常にfalseになります。

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

  • 通常のリクエスト(たとえば、ユーザーが初めてページを読み込んでいる場合)
  • ポストバック(たとえば、ページ上でボタンがクリックされ、サーバーにデータが送信された)

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

Session["UserHasVisitedThisPageBefore"] = true;

次に、現在のチェックの代わりにチェックできますIsPostBack

if(Session["UserHasVisitedThisPageBefore"] != null && (bool)Session["UserHasVisitedThisPageBefore"])
{
    // stuff here
}
于 2011-07-07T16:48:37.380 に答える
5

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

編集-更新に回答するには:IsPostBackデータベースを更新するかどうかを決定するために使用できます。falseの場合は、データベースを更新しないでください。更新しない場合は更新してください。

 if(IsPostBack)
 {
   //Update DB
 }
于 2011-07-07T16:47:05.833 に答える
2

カウンターのように、ページが更新されたことを検出するために他のメカニズムが必要なようです。ビューステート、セッション、隠しフィールド-多くのオプションがあります。

于 2011-07-07T16:56:57.060 に答える
1

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

POSTを実行すると、ポストバックはページ上で発生します。次に、サーバー側のフォームが送信されるか、WebコントロールautoPostBackがトリガーされます-ポストバックが発生します。IsPostBack本当になります。

于 2011-07-07T16:50:44.763 に答える
1

XSLがマークアップをレンダリングする特定のプロジェクトでは、IsPostBackが常にfalseであるというこの問題がありました。そのため、.NETのIsPostBackプロパティに依存する代わりに、Request.HttpMethodをチェックしただけです。

たとえば、!IsPostBackを確認する必要がある場合は、代わりにRequest.HttpMethod=="GET"かどうかを確認しました。

たとえば、IsPostBackを確認する必要がある場合は、代わりにRequest.HttpMethod=="POST"かどうかを確認しました。

于 2013-07-12T20:51:26.980 に答える