Come faccio ad aumentare un valore di passaggio da elaborare quando la pagina viene caricata in ASP.NET?
Domanda
Come posso incrementare un valore di passo da elaborare quando la pagina viene caricata? Ad esempio, nel codice sottostante la variabile viewstate non viene incrementata fino a dopo Page_Load, a causa del ciclo di vita della pagina ASP.NET.
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;
}
Soluzione
Basta spostare l'istruzione switch in un evento che si verifica in seguito. Per esempio. LoadComplete () o PreRender (). PreRender è probabilmente un po 'in ritardo, a seconda di ciò che vuoi fare.
Altri suggerimenti
Non c'è modo di aggirare questo. L'evento Page_Load si verificherà sempre prima che vengano attivati ??eventuali eventi di controllo. Se devi fare qualcosa dopo l'evento di controllo, usa Page_PreRender.
Incrementa durante l'evento LoadComplete o anche durante OnLoad.
Hai tutte le informazioni necessarie per decidere se aumentare i dati del modulo. Non è necessario attendere l'evento onClick (). Controlla il modulo per vedere se l'elemento verrà cliccato.
Cerca in request.params (" __ EVENTARGS ")
Identifica il controllo che ha causato il postback.
Se è necessario incrementare e controllare il valore durante Page_Load, un'opzione sarebbe quella di memorizzare il valore nella sessione anziché ViewState, ad esempio:
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
}
}