Come posso inviare un post onclientclick usando jQuery con asp.net
-
05-07-2019 - |
Domanda
Voglio ricreare il postback del pannello di aggiornamento senza utilizzare un pannello di aggiornamento per eseguire il postback. Qual è il metodo generico per farlo?
Ad esempio, su Stackoverflow, quando voti su o giù su una domanda, fa un postback per aggiornare il database e scommetto che non hanno usato un pannello di aggiornamento.
Che cosa ho?
Ho una tabella con i dati della tabella. Quando faccio clic sull'elemento td
come intera colonna, voglio fare un aggiornamento del database e anche aggiornare una visualizzazione griglia sulla pagina stessa. Il gridview mostra tutti gli elementi attualmente cliccati nella tabella perché è stato aggiornato tramite " il nostro metodo " ;.
Alla ricerca di un buon metodo generico che potrei usare per molti postback asincroni senza pannello di aggiornamento.
Soluzione
Il modo in cui Stack Overflow funziona differisce in due modi importanti dall'articolo CodeProject.
-
StackTranslate.it sta facendo la sua richiesta AJAX contro un'azione del controller ASP.NET MVC, non una pagina ASPX autonoma. È possibile considerarlo come analogo MVC di un metodo di pagina AJAX ASP.NET. In entrambi i casi, il metodo ASPX sarà in ritardo in termini di prestazioni.
-
La richiesta AJAX di Stack Overflow restituisce un risultato serializzato JSON, non testo in chiaro arbitrario o HTML. Questo rende la gestione sul lato client più standardizzata e generalmente più pulita.
Ad esempio: quando ho votato a favore di questa domanda è stata fatta una richiesta XmlHttpRequest a / questions / 171000 / voto, con un "votoTipoId"; di 2 nei dati POST.
Il controller che ha gestito la richiesta ha aggiunto il mio voto a un tavolo da qualche parte e poi ha risposto con questo JSON:
{"Success":true,"NewScore":1,"Message":"","LastVoteTypeId":2}
Utilizzando tali informazioni, questo JavaScript si occupa dell'aggiornamento del display lato client:
var voteResult = function(jClicked, postId, data) {
if (data.Success) {
jClicked.parent().find("span.vote-count-post").text(data.NewScore);
if (data.Message)
showFadingNotification(jClicked, data.Message);
}
else {
showNotification(jClicked, data.Message);
reset(jClicked, jClicked);
if (data.LastVoteTypeId) {
selectPreviousVote(jClicked, data.LastVoteTypeId);
}
}
};
Se stai usando WebForms, l'esempio di chiamata dei metodi di pagina che hai trovato sul mio blog è sicuramente nel campo giusto.
Tuttavia, suggerirei di prendere in considerazione un servizio Web per qualsiasi funzionalità centralizzata (come questo esempio di voto), anziché i metodi di pagina. I metodi della pagina sembrano essere leggermente più facili da scrivere, ma hanno anche alcuni svantaggi di riutilizzo e tendono a fornire un'illusione di maggiore sicurezza che non è proprio lì.
Questo è un esempio di fare la stessa cosa che hai trovato, ma con i servizi web (i commenti su questo post in realtà hanno portato al post che hai trovato):
http: // encosia .com / 2008/03/27 / usando-jquery-to-consumare-aspnet-jSON-web-services /
Altri suggerimenti
Puoi semplicemente usare una chiamata AJAX standard per farlo. Creare una pagina aspx che aggiorna il database nel suo metodo Page_Load e visualizza tutte le informazioni desiderate (come il valore DB corrente dopo l'aggiornamento) come XML. Quindi effettua una chiamata AJAX a quella pagina usando jQuery.
Puoi anche restituire un frammento HTML (cioè un GridView aggiornato) e usare jQuery per inserire il codice HTML aggiornato nella pagina corrente.
Modifica:
Il campione 2 in questa pagina dovrebbe essere molto vicino a quello che vuoi:
http://www.codeproject.com/KB/ajax/AjaxJQuerySample.aspx
Questo link è ciò che ho scoperto essere la cosa migliore da fare e mi consente di utilizzare i metodi javascript e web.