2010-03-02 6 views

risposta

14

È possibile utilizzare l'AJAX ASP.NET integrato.

Opzione 1 - utilizzare un servizio web (se si desidera che la funzionalità sia riutilizzabile):

  • creare un servizio Web (.asmx) con l'attributo [ScriptService],
  • aggiungere una alla tua pagina e aggiungi il servizio web alla sua raccolta Servizi,
  • usa il proxy JavaScript generato da ScriptManager nella tua pagina.

Opzione 2 - metodi di pagina utilizzo (se si desidera che la funzionalità in una singola pagina senza creare un servizio Web):

  • definiscono i metodi statici nella tua pagina, aggiungere [WebMethod] attribuire loro,
  • aggiungere uno ScriptManager con EnablePageMethods = "true",
  • utilizzare l'oggetto PageMethods per chiamare questo metodo da JavaScript.

In entrambi i casi JSON verrà utilizzato per il trasferimento dei dati.

Questo è un ampio tutorial con alcuni esempi di codice.

Tuttavia, ASP.NET AJAX è spesso accusato di inefficienza, ad esempio, il JS generato tende ad essere piuttosto grande. Quindi, se sei interessato alle prestazioni, vorresti testarlo a fondo.

si potrebbe anche dare un'occhiata a questa discussione: .NET AJAX Calls to ASMX or ASPX or ASHX?

+0

metodi pagina è stata la soluzione. – ProfK

2

Usa gestore generico web. Ad esempio ashx. Sono persino più veloci delle azioni MVC.

2
+0

In teoria è possibile. Tuttavia, nell'uso pratico, è possibile che si verifichi il problema della sessione di blocco: ogni richiesta proveniente dalla pagina del modulo Web è associata alla sessione utente per impostazione predefinita, pertanto è possibile eseguire richieste onejax solo una volta.Può o non può essere importante per il tuo progetto –

+1

Puoi utilizzare la sessione di sola lettura per la maggior parte delle richieste e leggere e scrivere per accedere/disconnettersi. Previene il problema di blocco. La sessione non è abilitata per l'API Web per impostazione predefinita. Devo chiamare il metodo da Application_PostAuthorizeRequest: HttpContext.Current.SetSessionStateBehavior (SessionStateBehavior.ReadOnly); –

+0

Sono preoccupato, perché abbiamo provato a includere un modulo Web API in un modulo Web ASP.NET legacy. È vero che l'API Web non ha sessione per impostazione predefinita, ma quando è accoppiato con Web Form, lo fa. Possiamo persino leggere le informazioni sulla sessione dalla richiesta dell'API. Nel caso comune non è un problema, fino a quando non avremo una chiamata API pesante –

0

Il mio metodo preferito in questo scenario sta usando un gestore generica web (Ashx) e JSON.net http://james.newtonking.com/json

E 'semplice, veloce e leggero.

Un semplice esempio potrebbe essere:

public void ProcessRequest(HttpContext context) 
{ 
     string jsonOutput = string.Empty; 
     context.Response.ContentType = "application/json"; 
     using (var db = new MyDBContext()) 
     { 
      var dbResult = db.myobject.select(); 
      jsonOutput = Newtonsoft.Json.JsonConvert.SerializeObject(dbResult); 
     } 
     context.Response.Write(jsonOutput); 
}