Как я могу обслуживать вызовы AJAX, используя JSON с веб-формами? - PullRequest
6 голосов
/ 02 марта 2010

Я знаю, что контроллеры MVC неплохо справляются с запросами AJAX в формате JSON, но есть ли какие-либо встроенные функции ASP.NET, которые я могу использовать для вызовов этого типа с простого старого сайта веб-форм?

Ответы [ 5 ]

14 голосов
/ 02 марта 2010

Вы можете использовать встроенный ASP.NET AJAX.

Вариант 1 - использовать веб-сервис (если вы хотите, чтобы функциональность использовалась повторно):

  • создать веб-сервис (.asmx) с атрибутом [ScriptService],
  • добавить на свою страницу и добавить веб-сервис в свою коллекцию служб,
  • использовать прокси JavaScript, сгенерированный ScriptManager на вашей странице.

Вариант 2 - использовать методы страницы (если вы хотите функциональность на одной странице без создания веб-службы):

  • определить статические методы на вашей странице, добавить к ним атрибут [WebMethod],
  • добавить ScriptManager с EnablePageMethods = "true",
  • использовать объект PageMethods для вызова этих методов из JavaScript.

В любом случае для передачи данных будет использоваться JSON.

Вот обширный учебник с некоторыми примерами кода.

Однако ASP.NET AJAX часто обвиняют в неэффективности - например, JS, который он генерирует, имеет тенденцию быть довольно большим. Поэтому, если вас интересует производительность, вам нужно тщательно ее протестировать.

Вы также можете взглянуть на эту тему: .NET AJAX Вызовы в ASMX, ASPX или ASHX?

2 голосов
/ 22 января 2014

Веб-API отлично работает с веб-формами. http://www.asp.net/web-api/overview/creating-web-apis/using-web-api-with-aspnet-web-forms

2 голосов
/ 02 марта 2010

Использовать универсальный веб-обработчик . то есть ясень . Это даже быстрее, чем действия MVC .

0 голосов
/ 22 января 2014

Мой предпочтительный метод в этом сценарии - использование универсального веб-обработчика (.ashx) и JSON.net http://james.newtonking.com/json

Это просто, быстро и легко.

Простой пример:

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); 
}
0 голосов
/ 02 марта 2010

Если у вас установлен .NET 3.5 на сервере, вы можете воспользоваться инструментами сериализации JSON , которые поставляются с платформой.

Используется класс DataContractJsonserializer .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...