2010-10-21 20 views
5

Ho un pulsante, che aggiorna un valore nel database. Questo valore viene utilizzato per determinare cosa disegnare sulla pagina. Tuttavia, a causa del ciclo di vita della pagina, la pagina viene ridisegnata prima dell'esecuzione del metodo di clic del pulsante, il che significa che eventuali modifiche non vengono applicate fino a quando la pagina non viene ricaricata nuovamente.Il metodo di clic del pulsante viene eseguito dopo il caricamento della pagina, il che significa che la pagina non viene aggiornata, come posso risolverlo?

Qual è la soluzione migliore?

Per chiarire:

pagina ha un pezzo di testo, che dice "Mi piacciono i gatti" se il valore del database è 1

pulsante 'Io odio i gatti' viene premuto, che imposta il valore del database di 0

la pagina viene ricaricata, ma ancora dice: "mi piacciono i gatti"

il tasto click evento viene gestito, e il valore del database diventa 0

Se la pagina viene aggiornata/ricaricata, ora indica correttamente "Detesto i gatti"

Si dovrebbe aggiornare quando si fa clic sul pulsante.

+1

Hmm..i Non sono sicuro di cosa si intende per "pagina ridisegna prima il clic del pulsante è eseguito ". Il clic sul pulsante si riferisce a un evento lato server? Se è così, allora deve essere eseguito prima dell'evento OnRender della pagina ... Consulta http://msdn.microsoft.com/en-us/library/ms178472.aspx – InSane

+0

Chiarito un po 'il mio problema – NibblyPig

+0

Dove esattamente è il pezzo di codice responsabile della visualizzazione di "Odio/amo i gatti"? – Preets

risposta

6

è possibile utilizzare il page prerender event. questo incendio dopo l'evento di controllo nello page lifecycle.

+0

questo dovrebbe funzionare, ma per qualche motivo i miei eventhandlers non funzionano quando sono impostati durante l'evento pre-rendering. Tuttavia mi sono appena reso conto che posso renderli statici e mostrarli/nasconderli piuttosto che crearli dinamicamente ... quindi si spera che funzionino allo stesso modo – NibblyPig

+0

cool. fammi sapere se questo funziona ... – rauts

+0

Probabilmente funzionerebbe ma dal momento che ora sto solo mostrando/nascondendo i controlli, posso farlo con page_load. Grazie per il tuo aiuto, però, alla fine mi ha dato la risposta giusta! – NibblyPig

0

Dove stai interrogando il database? Una semplice opzione sarebbe solo quella di utilizzare Response.Redirect alla pagina.

Penso che potresti ottenere il risultato dal metodo dei pulsanti e aggiornare semplicemente un'etichetta/letterale.

0

Una possibile soluzione consiste nell'eseguire una funzione javascript che aggiorna il database (utilizzando ajax) quando viene generato l'evento OnClientClick per il pulsante. In questo caso, quando la pagina raggiunge l'evento Page_Load, sarà possibile eseguire il rendering del contenuto appropriato, poiché il postback si verifica dopo l'esecuzione dello script. Dovrebbe funzionare correttamente se l'aggiornamento del database richiede un tempo relativamente breve.

0

Una curiosità, si usa qualsiasi cosa come Page.IsPostBack {fare qualcosa} .. Se è così, si potrebbe controllare se il codice di interfaccia utente di aggiornamento è al di fuori di questo controllo.

5

È possibile risolvere il problema da codice di seguito, utilizzare questo fine blocco Button_Click

per ASPX: (C#)

Response.Redirect(HttpContext.Current.Request.Path); 
+0

Grazie mille. Ho lottato con questo problema per un paio di giorni e non ho mai trovato una risposta adeguata, ma il tuo ha funzionato perfettamente. – Loyalar

Problemi correlati