2009-08-25 17 views
14

Sulla base delle mie considerazioni, entrambi essenzialmente fanno la stessa cosa (permettendoci di eseguire un metodo lato server da JS). Ci sono delle differenze?Differenza tra callback client e metodi pagina Ajax - ASP.NET

Inoltre, i metodi di pagina Ajax possono essere implementati utilizzando JQuery o utilizzando ScriptManager. Quale è preferito e perché ??

** BOUNTY: aggiunta di una taglia per ottenere una spiegazione chiara della domanda. Grazie **

risposta

22

Fondamentalmente, Client Callbacks e Ajax Pagina metodi stanno facendo la stessa cosa. Utilizzano un oggetto XMLHttpRequest per inviare una richiesta (solitamente asincrona) a qualche URL, ottenere i risultati di tale richiesta, quindi eseguire un metodo di richiamata che hai fornito (callback con un minuscolo c), passando i risultati del richiesta per il tuo metodo.

Detto questo, c'è una grande differenza tra i due approcci:

  • Metodi sono implementate come metodi statici sulla tua pagina. La tua classe di pagina è solo un comodo contenitore per questi metodi, che potrebbero davvero essere ospitati ovunque (un servizio Web, una HttpHandler personalizzata, ecc.). Poiché nessuna istanza verrà mai costruita, il client non deve inviare dati ViewState e Asp.Net non deve eseguire il ciclo di vita di Page. Il rovescio della medaglia è che non hai accesso ai tuoi metodi e proprietà di istanza della classe Page. Tuttavia, in molti casi è possibile aggirare questo problema rifattorizzando i metodi di istanza in metodi statici. (Vedi this article per ulteriori informazioni.)

  • Le callback dei client sono implementate come metodi di istanza nella pagina. Hanno accesso ad altri metodi di istanza sulla tua pagina, inclusi elementi memorizzati in ViewState. Questo è comodo, ma ha un prezzo: per costruire l'istanza Page, il cliente deve inviare una quantità relativamente grande di dati al server e deve correre attraverso una discreta fetta della pagina ciclo di vita. (. This article has a nice diagram che mostra quali parti)

A parte questo, il costo della loro creazione varia un po 'e clienti li usano in modo diverso:

  • client callback richiedono una buona dose di impalcatura idiosincratica codice che è intimamente accoppiato ad Asp.Net (come mostrato nel link sopra). Dato le alternative molto più facili che abbiamo ora, sono tentato di dire che questa tecnologia è obsoleta (per il nuovo sviluppo).

  • metodi pagina chiamante utilizzando ScriptManager richiede meno configurazione di client callback: basta al pop un ScriptManager sulla tua pagina , impostare EnablePageMethods = true, quindi accedere ai vostri metodi di pagina attraverso il proxy del PageMethods proxy.

  • Chiamare i metodi di pagina utilizzando jQuery richiede solo il collegamento della libreria jQuery (e la familiarità con jQuery, ovviamente).

Io preferisco usare jQuery per accedere ai metodi di pagina perché è indipendente dal framework server e espone la giusta quantità di dettagli di implementazione, ma è davvero solo una questione di gusti. Se si va con ScriptManager, la sua delega rende il metodo pagina chiama un po 'più facile per gli occhi, che alcuni potrebbero considerare più importante.

+0

Grazie per la risposta. I pageline possono essere non statici? Ho usato le callback prima e non c'era alcun obbligo per loro di essere statico. In questo modo, potrei avere accesso ai metodi della classe base. Nei metodi di pagina, non posso. – Nick

+0

Il mio piacere! Per quanto riguarda i metodi di pagina, deve essere statico perché Asp.Net non (e non può) creare istanze della classe Page durante l'esecuzione di un metodo di pagina. Questo articolo fa un buon lavoro per spiegare perché (e perché è generalmente auspicabile): http://encosia.com/2008/04/16/why-do-aspnet-ajax-page-methods-have-to-be-static /. Detto questo, è stata una grande svista non discuterne nella mia risposta. Aggiornerò la risposta per includere tali informazioni. –

+0

Vorrei poter raddoppiare quella risposta. Grazie Jeff! –

4

Direi che ci sono delle differenze, ma tenderei a dire farlo nel modo in cui ti senti più a tuo agio.

Ho usato entrambi gli approcci e avere chiamate jQuery dalla pagina è generalmente più veloce. Scrivo un gestore ashx che esegue il lavoro richiesto dalla jquery (interrogare il database, elaborare qualcosa, ecc.) E chiamarlo dalla pagina. Non userei una pagina aspx per una chiamata jQuery, perché stai inviando un sacco di informazioni che non ti serviranno affatto. La differenza/vantaggio dell'utilizzo di una chiamata Ajax.Net è che non è necessario creare un'altra pagina per elaborare le cose, è possibile utilizzare gli stessi eventi della pagina per farlo.

Ad esempio, se hai bisogno di riempire un secondo elenco a discesa utilizzando il valore selezionato su un primo, è possibile utilizzare Ajax.Net per chiamare il SelectedIndexChanged nel codice della pagina dietro e quando si spara andare Page Load, SelectedIndexChanged, Page_PreRender e così via. Nel metodo dell'evento si dovrebbe interrogare il db e riempire il secondo ddl.

Con jQuery potrebbe essere un po 'diverso. Effettui la chiamata a un gestore ashx, il gestore è solo un metodo server che esegue la magia e restituisce i dati nel modulo che si desidera avere (json, array di stringhe, xml, ecc.) E riempie il secondo ddl utilizzando javascript. Come ti ho detto prima, alcune persone non si sentono troppo tranquille con il codice cliente e tendono a farlo sul server, ma io dico sempre che devi usare lo strumento giusto per il lavoro giusto, quindi conosci i tuoi strumenti e applicali con saggezza

Se si desidera saperne di più su ASP.Net, i gestori ASHX e jQuery, è possibile leggere uno post che ho scritto a riguardo.

spero che helps.-

0

Sono essenzialmente uguali. Entrambi:

  1. Setup un webservice per voi che il javascript per il controllo può chiamare.
  2. Fornire respons asincroni e senza coinvolgere il ciclo di vita pagina.

sono diversi:

  1. Metodi richiedono semplicemente che si decorare un metodo statico con un attributo e si è fatto. Il resto della magia è gestito da gestori e moduli HTTP. callback richiede di implementare alcune interfacce e gestire i gestori di eventi asincrona te. Li trovo un po 'più di dolore.
  2. richiamate funzionano solo con alcuni controlli. Chiamando i metodi di pagina consente di colpire qualsiasi controllo tramite JavaScript personalizzato.Le callback hanno un leggero vantaggio in quanto il comportamento lato client è già scritto e risolto. Con i metodi di pagina si ha una maggiore flessibilità, tuttavia (il comportamento sul lato client è determinato dall'utente).

Ci sono alcune altre differenze, ma queste sono le basi. La mia comprensione è che i callback dei client tendono ad esibirsi come i metodi Page, ma non vengono utilizzati tanto perché sono disponibili solo in determinate situazioni, mentre un Page Method è sempre una strada valida.

Per quanto riguarda la domanda ScriptManager e JQuery, la mia sensazione qui è che si tratta del gusto più di ogni altra cosa. Mi piace la sintassi di JQuery e mi sembra che funzioni meglio, ma nel grande schema delle cose la cosa più costosa è la XmlHttpRequest ... dopo di che l'esecuzione del javascript rischia di essere insignificante nella differenza accanto a quella.