So che i controller MVC sono abbastanza bravi a servire richieste AJAX formattate JSON, ma esiste una funzionalità ASP.NET incorporata che posso utilizzare per queste chiamate di tipo da un semplice sito Web di moduli?Come si eseguono le chiamate AJAX tramite JSON con Web Form?
risposta
È 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?
Usa gestore generico web. Ad esempio ashx. Sono persino più veloci delle azioni MVC.
Se hai .NET 3.5 installato sul server, è possibile sfruttare la JSON serialization tools forniti con il quadro.
Questo utilizza la classe DataContractJsonserializer.
L'API Web funziona correttamente con Web Form. http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-aspnet-web-forms
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 –
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); –
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 –
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);
}
metodi pagina è stata la soluzione. – ProfK