2010-09-01 35 views
19

Più che uso ASP.NET, più if (!IsPostBack) {} sembra inutile ...Attuazione della IsPostBack nel caricamento della pagina

Primo esempio:

Per esempio, ho appena Googled un problema, hanno detto uso questo come parte della soluzione:

if (!Page.IsPostBack) 
{ 
    Page.LoadComplete += new EventHandler(Page_LoadComplete); 
} 

Che fa esattamente come codificato, LoadComplete sparerà solo sul primo carico. Dopo aver fatto clic su un pulsante o qualsiasi cosa che attiva un postback, l'evento LoadComplete viene lasciato sganciato, saltando così il gestore di eventi. Pertanto, la loro "correzione" funziona solo sul primo carico = senza valore. Ho prontamente commentato lo if (!Page.IsPostBack) {} e ora l'evento si attiva sempre come desiderato.

Secondo esempio:

Sto tentando di agganciare gli eventi a un pulsante creato in modo dinamico (che tra l'altro, non posso andare al lavoro [GRR!]). Vedo esempi che mostrano questo:

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); 

Come primo esempio, la mia comprensione è che l'evento non sarebbe stato agganciato dopo il primo caricamento della pagina, quindi il pulsante è "inerte", dopo uno scatto (perché facendo clic su innescato una postback).

Domanda:

Quando si dovrebbe utilizzare if (!IsPostBack) {}? Immagino che abbia a che fare solo con i controlli creati con mark-up.

+0

Francamente, qualsiasi codice nell'evento di caricamento non è racchiuso in un! Page.IsPostBack è una bandiera rossa per me durante le revisioni del codice. Spesso indica un fraintendimento di come funzionano le webform, soprattutto per quanto riguarda l'associazione dei dati. –

risposta

15

In breve, lo si utilizza ogni volta che è necessario per eseguire qualcosa che solo il primo carico .

L'utilizzo classico di Page.IsPostBack è l'inizializzazione di binding/controllo dei dati.

if(!Page.IsPostBack) 
{ 
    //Control Initialization 
    //Databinding 
} 

Le cose che sono persistenti e ViewStateControlState non hanno bisogno di essere ricreato su ogni postback in modo da verificare la presenza di questa condizione al fine di evitare l'esecuzione di codice non necessario.

Un altro classico utilizzo sta ricevendo ed elaborando i parametri Querystring. Non è necessario farlo sul postback.

+0

Sì, Viewstate è sicuramente la forza principale del suo utilizzo – Jared

4

È per l'elaborazione dei dati del modulo.

Se si desidera gestire i dati POST, si desidera farlo solo se la pagina ha effettivamente pubblicato i dati, non al primo caricamento. Quindi, il flag IsPostBack.

6

Quando non è necessario ripetere l'operazione tranne la prima volta.

utilizzarlo con operazioni costose (come ottenere dati da un database o popolamento di ListItems) che devono essere eseguiti solo la prima volta che viene caricata la pagina o il controllo. Se la pagina viene registrata sul server e poi ricaricata, non è necessario ripetere l'operazione. Testando il valore di IsPostBack, è possibile saltare l'operazione costosa,

+1

Tuttavia, con qualsiasi controllo aggiunto dinamicamente, si vaporizzano. Pertanto, ad esempio, aggiungendo dinamicamente una casella a discesa, gli elementi all'interno dell'elenco a discesa sarebbero stati vaporizzati con la casella a discesa stessa. – Yerg

+0

@Yerg, quindi è necessario aggiungere quei controlli prima di if (! IsPostBack) – harpo

+0

@Yerg questa pagina dovrebbe aiutare a capire IsPostBack in merito ai controlli dinamici. http://forums.asp.net/t/1186195.aspx –

3

Cosa può accadere se si causa un postback è possibile modificare lo stato dei propri controlli, senza significato. Ad esempio, nell'utilizzo di una griglia, se si effettua il postback durante la modalità di modifica, non sarà più possibile accedere ai campi modificati.

Spesso è necessario conservare le informazioni da disapearing in una pagina quando si colpisce il server, questo è il punto di

if(!Page.IsPostBack) 
1

I suoi gestori di eventi devono essere collegati ogni volta che l'evento può essere licenziato (indipendentemente dallo stato postback)

Inoltre, quando si aggiungono i controlli in modo dinamico, assicurarsi di osservare l'asp page lifecycle

0

Inoltre, è necessario utilizzare IsPostBack se vuoi inizializzare i controlli, altrimenti verranno ripristinati al valore predefinito su ogni carico. Questo confonderà l'utente come quando tenterà di utilizzare il modulo, i valori inseriti verranno ripristinati ai valori predefiniti.

1
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(); 
    } 
} 
+0

Alcune spiegazioni di questo codice sarebbero state belle –

0

In primo luogo è necessario capire che cosa è postback, quando si avvia il progetto in Visual Studio,
se si dispone di un if statement che verifica se isPostBack è true o false nel metodo Page_Load, a questo punto, isPostBack è , quindi non è un postback, quindi cos'è il postback,
ora fare clic su un button (se non si dispone di un pulsante, si prega di aggiungere uno e il metodo di clic del pulsante pure), a questo punto, si invia un richiesta di nuovo al server, il server quindi la risposta, questo processo è il cosiddetto postback, che viene attivato cliccando sul button,

una cosa si ha realmente bisogno di notare, il metodo Page_Load verrà eseguito di nuovo, sarà eseguito non solo il metodo Button_click, così ora, il isPostBack è true , significa che è postback, sì, è davvero un postback, perché hai cliccato sul pulsante.

Problemi correlati