Processamento do lado do servidor de DataTables jQuery usando ASP.NET WebForms

Problema:

  • Processamento do lado do servidor do DataTables jQuery usando ASP.NET WebForms.

Solução:

  • Darin Dimitrov respondeu à pergunta usando um exemplo de quais páginas e tipos, mas não faz nenhuma pesquisa. Aqui está minha modificação ** básica ** de seu trabalho para fazer a pesquisa funcionar em seu exemplo:
public class Data : IHttpHandler { public void ProcessRequest(HttpContext context) { // Paging parameters: var iDisplayLength = int.Parse(context.Request["iDisplayLength"]); var iDisplayStart = int.Parse(context.Request["iDisplayStart"]); // Sorting parameters var iSortCol = int.Parse(context.Request["iSortCol_0"]); var iSortDir = context.Request["sSortDir_0"]; // Search parameters var sSearch = context.Request["sSearch"]; // Fetch the data from a repository (in my case in-memory) var persons = Person.GetPersons(); // Define an order function based on the iSortCol parameter Func order = person => iSortCol == 0 ? (object) person.Id : person.Name; // Define the order direction based on the iSortDir parameter persons = "desc" == iSortDir ? persons.OrderByDescending(order) : persons.OrderBy(order); // prepare an anonymous object for JSON serialization var result = new { iTotalRecords = persons.Count(), iTotalDisplayRecords = persons.Count(), aaData = persons .Where(p => p.Name.Contains(sSearch)) // Search: Avoid Contains() in production .Where(p => p.Id.ToString().Contains(sSearch)) .Select(p => new[] {p.Id.ToString(), p.Name}) .Skip(iDisplayStart) // Paging .Take(iDisplayLength) }; var serializer = new JavaScriptSerializer(); var json = serializer.Serialize(result); context.Response.ContentType = "application/json"; context.Response.Write(json); } public bool IsReusable { get { return false; } } } public class Person { public int Id { get; set; } public string Name { get; set; } public static IEnumerable GetPersons() { for (int i = 0; i < 57; i++) { yield return new Person { Id = i, Name = "name " + i }; } } } 

Eu escrevi um exemplo simples que deveria ilustrar a ideia.

Comece escrevendo um manipulador genérico para manipular dados no lado do servidor ( Data.ashx mas isso pode ser uma página da Web, um serviço da web, qualquer script do lado do servidor capaz de retornar dados formatados em JSON):

 public class Data : IHttpHandler { public void ProcessRequest(HttpContext context) { // Those parameters are sent by the plugin var iDisplayLength = int.Parse(context.Request["iDisplayLength"]); var iDisplayStart = int.Parse(context.Request["iDisplayStart"]); var iSortCol = int.Parse(context.Request["iSortCol_0"]); var iSortDir = context.Request["sSortDir_0"]; // Fetch the data from a repository (in my case in-memory) var persons = Person.GetPersons(); // Define an order function based on the iSortCol parameter Func order = p => { if (iSortCol == 0) { return p.Id; } return p.Name; }; // Define the order direction based on the iSortDir parameter if ("desc" == iSortDir) { persons = persons.OrderByDescending(order); } else { persons = persons.OrderBy(order); } // prepare an anonymous object for JSON serialization var result = new { iTotalRecords = persons.Count(), iTotalDisplayRecords = persons.Count(), aaData = persons .Select(p => new[] { p.Id.ToString(), p.Name }) .Skip(iDisplayStart) .Take(iDisplayLength) }; var serializer = new JavaScriptSerializer(); var json = serializer.Serialize(result); context.Response.ContentType = "application/json"; context.Response.Write(json); } public bool IsReusable { get { return false; } } } public class Person { public int Id { get; set; } public string Name { get; set; } public static IEnumerable GetPersons() { for (int i = 0; i < 57; i++) { yield return new Person { Id = i, Name = "name " + i }; } } } 

E então um formulário da Web:

 <%@ Page Title="Home Page" Language="C#" %>           
ID Name
Loading data from server

O exemplo é supersimplificado, mas espero que ilustre o básico sobre como ficar atento.

As páginas de exemplo que você listou realmente ordenam, paginam, filtram na boot. Basicamente, você passa esses dados via string de consulta.

Algo como:

 sAjaxSource": "../examples_support/server_processing.ashx?SortBy=FirstName&FilterBy=StackOverFlow" 

Dito isto, se você deseja replace algum comportamento ou deseja estender a funcionalidade do dataTable, você tem algumas opções: Estendendo a funcionalidade dataTable Customizando Scrolling

Você pode seguir os exemplos acima e personalizá-los para Filtragem, Classificação e Paginação

Eu sou desenvolvedor asp.Net … Por favor, tenha em mente que os desenvolvedores .net são usados ​​para construir páginas da web usando controles .net, não controles de javascript.

A diferença é: um controle asp.net é um controle do lado do servidor, você o gerencia sem escrever seu próprio javascript, mas programando em C # / VB.net. O controle asp.net gera automaticamente o controle javascript do lado do cliente quando o site é executado.

A abordagem é mais “moderna” e realmente poderosa.

Então, se você é um desenvolvedor .net, sugiro que você use essa abordagem. Se você for um desenvolvedor de javascript e estiver criando apenas a interface do lado do cliente do seu aplicativo, provavelmente precisará de um webService que forneça os dados do lado do servidor em formato XML para os quais você possa ligar e ler em HTTP. Mas, para “pesquisar”, fornecer “paginação” e “sorting” via AJAX você precisa desenvolver o lado do servidor …

http://naspinski.net/post/REAL-AJAX-with-AspNet-(not-AspNet-AJAX).aspx

Esse cara fez o ajax funcionar com o asp.net e os dados de dados.