ASP.NETでページが読み込まれたときに処理されるステップ値をインクリメントするにはどうすればよいですか?
質問
ページがロードされたときに処理されるステップ値をインクリメントするにはどうすればよいですか?たとえば、以下のコードでは、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を使用します。
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
}
}
所属していません StackOverflow