最近比较忙,一直没有更新,先发一篇 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);