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.

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top