当前位置: 首页 > 面试题库 >

使用ASP.NET WebForms的jQuery DataTables服务器端处理

咸晨
2023-03-14
问题内容

问题:

  • 使用ASP.NET WebForms的jQuery DataTables服务器端处理。

解:

  • 达林·迪米特洛夫(Darin Dimitrov)使用一个分页和排序但不进行任何搜索的示例回答了这个问题。这是我对他的作品进行的“基本”修改,以使他的示例可以进行搜索:
    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<Person, object> 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<Person> GetPersons()
        {
            for (int i = 0; i < 57; i++)
            {
                yield return new Person { Id = i, Name = "name " + i };
            }
        }
    }

问题答案:

我写了一个简单的例子来说明这个想法。

首先,编写用于在服务器端处理数据的通用处理程序(Data.ashx但这可以是网页,Web服务,任何能够返回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<Person, object> 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<Person> GetPersons()
        {
            for (int i = 0; i < 57; i++)
            {
                yield return new Person
                {
                    Id = i,
                    Name = "name " + i
                };
            }
        }
    }

然后是一个WebForm:

    <%@ Page Title="Home Page" Language="C#" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
    <head id="Head1" runat="server">
        <title></title>
        <link rel="stylesheet" type="text/css" href="/styles/demo_table.css" /> 
        <script type="text/javascript" src="/scripts/jquery-1.4.1.js"></script>
        <script type="text/javascript" src="/scripts/jquery.dataTables.js"></script>
        <script type="text/javascript">
            $(function () {
                $('#example').dataTable({
                    'bProcessing': true,
                    'bServerSide': true,
                    'sAjaxSource': '/data.ashx'
                });
            });
        </script>
    </head>
    <body>
        <form id="Form1" runat="server">
            <table cellpadding="0" cellspacing="0" border="0" class="display" id="example"> 
                <thead> 
                <tr> 
                    <th>ID</th> 
                    <th>Name</th> 
                </tr> 
                </thead> 
                <tbody> 
                <tr> 
                    <td colspan="5" class="dataTables_empty">Loading data from server</td> 
                </tr> 
                </tbody> 
            </table>
        </form>
    </body>
    </html>

该示例过于简化,但我希望它能说明如何凝视的基础知识。



 类似资料:
  • 我是新来的数据。我试图找到解决方案的服务器端处理,因为过去两天,但没有找到解决方案。 我的JS代码是 可数据以表格式呈现JSON。但是排序、分页和搜索操作是行不通的。无论我从下拉列表中选择了多少值,它都会在第一页显示所有结果 在底部,它还显示了像“显示0到0的0个条目(从NaN总条目中过滤)”这样的消息 如果我通过服务器端:false。一切正常。但我希望服务器端处理相同的数据 任何帮助都将不胜感激

  • 在开发阶段,在页面中嵌入一个 Less.js 将Less在线编译成CSS样式,确实很方便。但是,在线编译会产生加载延迟,即便在浏览器中有不足一秒的加载延迟,也会降低性能。如果Javascrip执行错误,还会引起美观问题。因此,在生产环境中,并不推荐这种方式,而是推荐在服务器端使用Less。 在服务器端使用Less,需要借助于 Less 的编译器,由它将 Less 源文件编译成最终的 CSS 文件。

  • 我尝试使用Java中的Sockets连接到多个客户端。一切似乎都正常,但问题是,服务器只监听第一个客户端。如果有多个客户端,服务器可以向它们发送所有消息,但他可以只监听来自第一个客户端的消息。我尝试了所有这些(我从昨天开始就遇到了这个问题)。所以我很确定,错误一定在“ClientListener”类中。 说明:有一个客户端列表(用于与字符串通信的连接)。在GUI中有一个列表,我可以在其中选择要与哪

  • 我为此挣扎了好几天。我正在尝试将Sergio Llana的服务器端解决方案应用到我现有的项目中。 Sergio的数据表服务器端处理 这是我的实现: 我的数据表服务器端处理 不同的是,我的解决方案从MySQL数据库抓取数据,而不是本地文件。我认为我很接近使它工作,从数据库的数据显示在表中正确。当我关闭服务器端选项,排序和搜索工作正常,但当我打开它,每次我点击列,搜索或其他任何东西,我得到的只是"处理

  • 嗨,我在试图理解如何使用datatables进行服务器端处理时遇到了一些主要问题。在某些背景下,我使用一个服务调用Gamesparks为视频游戏创建后端,在这个服务中,他们有一个mongodb的实现。 我有一个endpoint可以获取所有用户,我可以在表中看到他们,但问题是我获取了所有用户,如何实现分页?。在文档中,他们声明我们必须将serverSide设置为true,但不起作用。我真的不知道如何

  • 我是Java新手,希望接受包含股市详细信息的字符串。如果现有字符串包含脚本的购买订单,请按给定价格查找卖家。如果没有匹配项可用,则将新订单添加到现有采购订单队列。 这些需要尽可能快地完成,或者最好并行完成,以便给定的应用程序可以在最短的时间内处理尽可能多的订单。