Come faccio ad aumentare un valore di passaggio da elaborare quando la pagina viene caricata in ASP.NET?

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

  •  03-07-2019
  •  | 
  •  

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;
}
È stato utile?

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.

Immagine del ciclo di vita della pagina ASP.Net

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
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top