zoukankan      html  css  js  c++  java
  • 使用 jQuery dataTables 3 解析请求参数

    最近比较忙,一直没有更新,先发一篇 dataTables 参数处理。
    对于 dataTables 来说,当使用服务器端分页的时候,会向服务器传递多个参数,在服务器端根据这些参数来进行服务器端的分页处理。这些参数比较多,详细地说明见 使用 jQuery dataTables - 2 四种数据来源
    对于服务器端来说,显然需要将这些参数进行解析,以方便使用,下面的代码将请求参数解析为一个 C# 的对象,这样,服务器端就可以方便地使用这些参数了。
    代码由有比较详细的注释,也可以点击这里直接下载代码。
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    
    namespace jQuery.DataTables
    {
        // 排序的方向
        public enum SortDirection
        {
            Asc,    // 升序
            Desc    // 降序
        }
    
        // 排序列的定义
        public class SortColumn
        {
            public int Index { get; set; }                  // 列序号
            public SortDirection Direction { get; set; }    // 列的排序方向
        }
    
        // 列定义
        public class Column
        {
            public string Name { get; set; }        // 列名
            public bool Sortable { get; set; }      // 是否可排序
            public bool Searchable { get; set; }    // 是否可搜索
            public string Search { get; set; }      // 搜索串
            public bool EscapeRegex { get; set; }   // 是否正则
        }
    
        public class DataTablesRequest
        {
            private HttpRequestBase request;        // 内部使用的 Request 对象
    
            public DataTablesRequest(System.Web.HttpRequestBase request)    // 用于 MVC 模式下的构造函数
            {
                this.request = request;
    
                this.echo = this.ParseStringParameter(sEchoParameter);
                this.displayStart = this.ParseIntParameter(iDisplayStartParameter);
                this.displayLength = this.ParseIntParameter(iDisplayLengthParameter);
                this.sortingCols = this.ParseIntParameter(iSortingColsParameter);
    
                this.search = this.ParseStringParameter(sSearchParameter);
                this.regex = this.ParseStringParameter(bRegexParameter) == "true";
    
                // 排序的列
                int count = this.iSortingCols;
                this.sortColumns = new SortColumn[count];
                for (int i = 0; i < count; i++)
                {
                    SortColumn col = new SortColumn();
                    col.Index = this.ParseIntParameter(string.Format("iSortCol_{0}", i));
                    col.Direction = SortDirection.Asc;
                    if (this.ParseStringParameter(string.Format("sSortDir_", i)) == "desc")
                        col.Direction = SortDirection.Desc;
                    this.sortColumns[i] = col;
                }
    
                this.ColumnCount = this.ParseIntParameter(iColumnsParameter);
    
                count = this.ColumnCount;
                this.columns = new Column[count];
    
                string[] names = this.ParseStringParameter(sColumnsParameter).Split(',');
    
                for (int i = 0; i < count; i++)
                {
                    Column col = new Column();
                    col.Name = names[i];
                    col.Sortable = this.ParseStringParameter(string.Format("bSortable_{0}", i)) == "true";
                    col.Searchable = this.ParseStringParameter(string.Format("bSearchable_{0}", i)) == "true";
                    col.Search = this.ParseStringParameter(string.Format("sSearch_{0}", i));
                    col.EscapeRegex = this.ParseStringParameter(string.Format("bRegex_{0}", i)) == "true";
                    columns[i] = col;
                }
            }
            public DataTablesRequest(HttpRequest httpRequest)       // 标准的 WinForm 方式下的构造函数
                : this(new HttpRequestWrapper(httpRequest))
            { }
    
            #region
            private const string sEchoParameter = "sEcho";
    
            // 起始索引和长度
            private const string iDisplayStartParameter = "iDisplayStart";
            private const string iDisplayLengthParameter = "iDisplayLength";
    
            // 列数
            private const string iColumnsParameter = "iColumns";
            private const string sColumnsParameter = "sColumns";
    
            // 参与排序列数
            private const string iSortingColsParameter = "iSortingCols";
            private const string iSortColPrefixParameter = "iSortCol_";         // 排序列的索引
            private const string sSortDirPrefixParameter = "sSortDir_";         // 排序的方向 asc, desc
    
            // 每一列的可排序性
            private const string bSortablePrefixParameter = "bSortable_";
    
            // 全局搜索
            private const string sSearchParameter = "sSearch";
            private const string bRegexParameter = "bRegex";
    
            // 每一列的搜索
            private const string bSearchablePrefixParameter = "bSearchable_";
            private const string sSearchPrefixParameter = "sSearch_";
            private const string bEscapeRegexPrefixParameter = "bRegex_";
            #endregion
    
            private readonly string echo;
            public string sEcho
            {
                get { return echo; }
            }
    
            private readonly int displayStart;
            public int iDisplayStart
            {
                get { return this.displayStart; }
            }
    
            private readonly int displayLength;
            public int iDisplayLength
            {
                get { return this.displayLength; }
            }
    
            // 参与排序的列
            private readonly int sortingCols;
            public int iSortingCols
            {
                get { return this.sortingCols; }
            }
    
            // 排序列
            private readonly SortColumn[] sortColumns;
            public SortColumn[] SortColumns
            {
                get { return sortColumns; }
            }
    
            private readonly int ColumnCount;
            public int iColumns
            {
                get { return this.ColumnCount; }
            }
    
            private readonly Column[] columns;
            public Column[] Columns
            {
                get { return this.columns; }
            }
    
            private readonly string search;
            public string Search
            {
                get { return this.search; }
            }
    
            private readonly bool regex;
            public bool Regex
            {
                get { return this.regex; }
            }
    
            #region 常用的几个解析方法 
            private int ParseIntParameter(string name)          // 解析为整数
            {
                int result = 0;
                string parameter = this.request[name];
                if (!string.IsNullOrEmpty(parameter))
                {
                    int.TryParse(parameter, out result);
                }
                return result;
            }
    
            private string ParseStringParameter(string name)    // 解析为字符串
            {
                return this.request[name];
            }
    
            private bool ParseBooleanParameter(string name)     // 解析为布尔类型
            {
                bool result = false;
                string parameter = this.request[name];
                if (!string.IsNullOrEmpty(parameter))
                {
                    bool.TryParse(parameter, out result);
                }
                return result;
            }
            #endregion
        }
    }
    
    
    

    这样在使用中就可以这样来获取请求参数了。

    jQuery.DataTables.DataTablesRequest param
    = new jQuery.DataTables.DataTablesRequest(this.Request);

  • 相关阅读:
    自己遇到的冲突及解决方案
    怎么解决代码冲突及切换分支
    程序员修养
    代码回退
    gitlab两种连接方式:ssh和http配置介绍
    gitlab创建项目及分支
    github,gitlab的区别
    代码托管有什么用
    新手搭建云服务器详细过程
    UNP学习笔记(第十一章 名字与地址转换)
  • 原文地址:https://www.cnblogs.com/haogj/p/1990595.html
Copyright © 2011-2022 走看看