2009-05-06 11 views
7

私は特にPage.IsPostBackが何を意味するのか知りたいです。私はそれがユーザーが のデータをサーバー側に送信していることを示していることを、標準のASP.NETページで日常的に使用していることを十分に認識しています。 Page:IsPostBack PropertyIsPostBackは実際に何を意味しますか?

を参照してくださいしかし、このHTML

<html> 
    <body> 
     <form method="post" action="default.aspx"> 
     <input type="submit" value="submit" /> 
     </form> 
    </body> 
</html> 

送信ボタンをクリックする与えられ、ページはをPage_Loadメソッドが呼び出されますが、Page.IsPostBackはfalseを返しています。 runat=serverを追加したくありません。

最初に読み込まれたページと、クライアントが送信を開始したことによるリクエストの違いを教えてください。私は<input type="text" value="aa" name="ctrl" id="ctrl" />に追加した

更新がそうのRequest.Formは要素を持ち、そしてRequest.HTTPMethodはPOSTですが、まだ偽IsPostBackプロパティのですか?

答えて

6

これを行う1つの方法は、ASP.NETページクラスを拡張し、IsPostBackプロパティを "オーバーライド"し、すべてのページを拡張ページから派生させることです。

public class MyPage : Page 
{ 
    public new bool IsPostBack 
    { 
     get 
     { 
      return 
      Request.Form.Keys.Count > 0 && 
      Request.RequestType.Equals("POST", StringComparison.OrdinalIgnoreCase); 
     } 
    } 
} 
+0

+1これはおそらく私の問題の解決策です。感謝 –

+3

実際には "IsPost"という名前のプロパティに適しています。 – Kris

+0

"Request.Form.Keys.Count"を含むように編集しました。次に、Request.Form ["ctrl"]を使用してテキストボックスから値を検索できます –

1

質問に含める例では、関連するビューステートはありません。サーバーがこの要求をページの前の要求にリンクし、それらを1つの単位として扱う方法はありません。ボタンをクリックしたリクエストは、サーバーに入ってくる他のランダムリクエストと同じように見えます。

0

入力コントロールが(tvanfossonが指摘するようにRequest.Formsを使用して)値を返すかどうかを確認することができます。しかし、本当に大きな質問は、あなたがでない理由です。 runat = serverを追加します。 ASP.NET(MVCを除く)によって実装されたページ処理エディタ全体は、サーバー経由のページ出力を処理してコールバックなどの適切なクライアント側コードを設定することに依存します。

12

Request.Formコレクションをチェックしてそれは空ではない。 POSTだけがRequest.Formコレクションにデータを持ちます。もちろん、フォームデータがない場合、リクエストはGETと区別できません。

タイトルの質問に関しては、要求がサーバー側のフォームコントロールからのPOSTの場合、IsPostBackはtrueに設定されます。あなたのフォームをクライアントサイドだけにすることは、これを打ち負かします。

+0

+1私から。私は、Request.Formsが生の入力フォームデータを取得する場所であったことを覚えています。これは正解です。私はまだ興味がありますが、なぜIanはページ処理を設定していないのですか。 –

+0

@マーク - 私は "ハードコア"で、すべて自分でやっています。理由を聞かないでください:-) –

+0

+1 @tvanfosson - 私は "Request.Form.Keys.Count> 0"も含めることができるので、私は答えとして他の質問をマークしました –

1

一般的にあなたがの組み合わせとしてポストバックを見ることができる:

  1. HTTPリクエストメソッドが "POST"
  2. HTTPヘッダーHTTP_REFERERは100%確実なではありません、現在のURL

に等しい等しいですtho、それはあなたがそれを知らないどんな種類の状態も考慮に入れていませんが(それがわからない場合でもおそらく望みます)、投稿戻る現在のページ。