ASP.NETを使用すればするほど、if (!IsPostBack) {}
は無意味に見えます...
最初の例:
たとえば、私は問題をグーグル化しただけで、これをソリューションの一部として使用すると言いました:
_if (!Page.IsPostBack)
{
Page.LoadComplete += new EventHandler(Page_LoadComplete);
}
_
コード化されたとおりに機能し、LoadCompleteは最初のロードでのみ起動します。ボタンまたはポストバックをトリガーするものをクリックした後、LoadCompleteイベントはフックされずに残り、イベントハンドラーをスキップします。したがって、それらの「修正」は最初のロードでのみ機能します。私はすぐにif (!Page.IsPostBack) {}
をコメントアウトしました。これで、イベントは常に必要に応じてトリガーされます。
2番目の例:
動的に作成されたボタンにイベントをフックしようとしています(ちなみに、[GRR!]で作業できません)。私はこれを示す例を見ます:
_myEditToggleButton = new Button();
myEditToggleButton.ID = "editToggleButton";
//^GOTTA HAVE THIS FOR EVENTS TO WORK! (supposedly, I haven't seen it work...)
if (!IsPostBack)
{
myEditToggleButton.Click += new EventHandler(myEditToggleButton_Click);
}
Controls.Add(myEditToggleButton);
_
最初の例と同様に、最初のページの読み込み後にイベントがフックされないため、ボタンをクリックするとポストバックがトリガーされるため、ボタンは1回クリックすると「不活性」になります。
質問:
いつif (!IsPostBack) {}
を使用する必要がありますか?マークアップで作成されたコントロールのみに関係していると思います。
つまり、最初のロードでのみ何かを実行する必要があるたびに、それを使用します。
Page.IsPostBack
の典型的な使用法は、データバインディング/コントロールの初期化です。
if(!Page.IsPostBack)
{
//Control Initialization
//Databinding
}
ViewState
とControlState
で永続化されるものは、ポストバックごとに再作成する必要がないため、不要なコードの実行を回避するために、この状態を確認してください。
もう1つの古典的な使用法は、Querystring
パラメーターの取得と処理です。ポストバックでこれを行う必要はありません。
初回以外の操作を繰り返す必要がない場合。
これは、ページまたはコントロールが最初に読み込まれるときにのみ実行する必要がある負荷の高い操作(データベースからのデータの取得やListItemの作成など)で使用します。ページがサーバーにポストされてから再ロードされた場合、操作を繰り返す必要はありません。 IsPostBackの値をテストすることで、高価な操作をスキップできます。
フォームデータを処理するためのものです。
POSTされたデータを処理する場合は、ページが実際にデータをポストした場合にのみ処理します。最初のロード時ではありません。したがって、IsPostBackフラグです。
ポストバックを引き起こした場合に起こり得ることは、意味を持たずにコントロールの状態を変更できることです。たとえば、gridviewを使用する場合、編集モード中にポストバックすると、編集したフィールドにアクセスできなくなります。
多くの場合、サーバーにアクセスしたときに情報がページに表示されないようにする必要があります。これがポイントです。
if(!Page.IsPostBack)
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) {
SqlConnection conn = new SqlConnection("Data Source=-----; Database=-----; Integrated Security=True");
SqlDataAdapter da = new SqlDataAdapter();
conn.Open();
da.SelectCommand = new SqlCommand("Select Command",conn);
conn.Close();
DataTable dt = new DataTable();
da.Fill(dt);
ddlSearch.DataSource = dt;
ddlSearch.DataTextField = "---";
ddlSearch.DataValueField = "---";
ddlSearch.DataBind();
}
}
イベントを発生させることができるときはいつでも、イベントハンドラーを関連付ける必要があります(PostBackステータスに関係なく)。
また、コントロールを動的に追加するときは、必ずasp page lifecycle を確認してください
また、コントロールを初期化する場合は、IsPostBackを使用する必要があります。そうしないと、ロードのたびにデフォルトに戻ります。これは、ユーザーがフォームを使用しようとすると、入力した値がデフォルトにリセットされるため、ユーザーを混乱させます。
まず、Visual Studioでプロジェクトを開始するときに、ポストバックとは何かを理解する必要があります。if statement
は、isPostBack
がtrue
またはfalse
であるかどうかを確認しますPage_Load
メソッド、この時点では、isPostBack
はfalse
であり、postback
ではないことを意味します。
ここでbutton
をクリックします(ボタンがない場合は、ボタンとボタンクリックメソッドも追加してください)。この時点で、サーバーにリクエストを送信します。サーバーが応答すると、このプロセスはpostback
と呼ばれ、button
をクリックするとトリガーされます。
あなたが本当に気づく必要がある一つのこと、Page_Load
メソッドだけでなく、Button_click
メソッドが実行されるので、isPostBack
はtrue
です。これは、ポストバックであることを意味します。ボタンをクリックしたため、実際にはポストバックです。