ASP.NETでページが読み込まれたときに処理されるステップ値をインクリメントするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/418596

  •  03-07-2019
  •  | 
  •  

質問

ページがロードされたときに処理されるステップ値をインクリメントするにはどうすればよいですか?たとえば、以下のコードでは、ASP.NETページのライフサイクルのために、Page_Loadの後までviewstate変数は増加しません。

protected void Page_Load(object sender, EventArgs e)
{
    switch ((int)ViewState["step"])
    {
        //do something different for each step
    }
}

protected void btnIncrementStep_Click(object sender, EventArgs e)
{
    //when the button is clicked, this does not fire 
    //until after page_load finishes
    ViewState["step"] = (int)ViewState["step"] + 1;
}
役に立ちましたか?

解決

switchステートメントを、後で発生するイベントに移動するだけです。例えば。 LoadComplete()またはPreRender()。 PreRenderは、目的に応じておそらく少し遅れます。

他のヒント

これを回避する方法はありません。 Page_Loadイベントは、コントロールイベントが発生する前に常に発生します。コントロールイベントの後に何かを行う必要がある場合は、Page_PreRenderを使用します。

ASP.Net Page Lifecycle Image

LoadComplete イベント中、またはOnLoad中にインクリメントします。

フォームデータからインクリメントするかどうかを決定するために必要なすべての情報があります。 onClick()イベントを待つ必要はありません。フォームをチェックして、アイテムがクリックされるかどうかを確認します。

request.params(" __ EVENTARGS")を見てください

これは、ポストバックを引き起こしたコントロールを識別します。

Page_Load中に値をインクリメントしてチェックする必要がある場合、オプションはViewStateではなくセッションに値を保存することです。例:

private int Step
{
  get { return (int)Session["step"]; }
  set { Session["step"] = value; }
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
       Step = 0; // init
    else
       Step ++; // increment

    switch (Step)
    {
        //do something different for each step
    }
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top