如何在服务器端处理的数据表上使用搜索?
Posted
技术标签:
【中文标题】如何在服务器端处理的数据表上使用搜索?【英文标题】:How to use search on datatables with server-side processing? 【发布时间】:2015-03-11 07:11:22 【问题描述】:使用数据表时server-side
处理。搜索值如何传递给服务器?我查看了doc。
数据表自动将draw
、start
和length
发送到服务器。我可以而且应该用search
做一些类似的事情吗?文档中提到了search[value]
,但我不知道如何解释它。
客户
$(document).ready(function ()
var url = '@Url.Action("GetJsonData", "Home")';
$('#example').dataTable(
'searching': true,
"paging": true,
"processing": true,
"serverSide": true,
"ajax":
"url": url,
"type": "GET"
,
"columns": [
"data": "id" ,
"data": "name"
]
);
);
服务器
public JsonResult GetJsonData(string draw, int start, int length, string search)
var hugeDataArr = new object[100];
var returnDataArr = new object[length];
for (int i = 0; i < hugeDataArr.Length; i++)
hugeDataArr[i] = new
DT_RowId = i,
id = "id" + i.ToString().PadLeft(2, '0'),
name = "nameæøå" + i.ToString().PadLeft(2, '0')
;
for (int i = 0; i < length; i++)
returnDataArr[i] = hugeDataArr[start + i];
JsonResult json = Json(new
draw = Convert.ToInt32(draw),
recordsTotal = 100, // calculated field
recordsFiltered = 50, // calculated field
data = returnDataArr
, JsonRequestBehavior.AllowGet);
return json;
【问题讨论】:
【参考方案1】:您不应该使用搜索作为参数。但它会自动成为您的查询字符串的一部分。
public JsonResult GetJsonData(string draw, int start, int length)
string search = Request.QueryString["search[value]"];
// your code for search filtering
谢谢 拉维
【讨论】:
你真的可以用 URL 请求而不是参数来做参数。【参考方案2】:我使用它,因为它永远不会为空,而是一个空字符串。
Request.Form.GetValues("search[value]")[0]
【讨论】:
【参考方案3】:如果你想在服务器端获取 serach box 的值:
字符串搜索 = Request.Form.GetValues("search[value]").FirstOrDefault();
这将为您提供搜索框的值。
【讨论】:
【参考方案4】:如 docs 数据表中所写,传递一个包含两个值的搜索数组。 search[value] 是过滤所需的搜索字符串,search[regex] 只是一个布尔值,表示 search[value] 应该解释为正则表达式还是字符串。
如果您在特定列中搜索值,则搜索字符串将位于列[i][search][value]
【讨论】:
所以我的动作参数错了?不应该是string search
,而是string[] search
?
我现在已经尝试了 string[] 搜索,但它仍然为空。
文档说:“适用于所有可搜索为真的列。”我应该添加这个对吗?【参考方案5】:
如果search[value]
参数始终为空,请确保您在客户端使用POST
Ajax 调用,并且控制器的操作方法标记为[HttpPost]
。
客户端:
$('#example').dataTable(
"processing": true,
"serverSide": true,
"ajax":
"url": url,
"type": "POST"
,
//Other configurations
);
服务器:
[HttpPost]
public JsonResult GetJsonData(string draw, int start, int length)
string search = Request.QueryString["search[value]"];
// your code for search filtering
【讨论】:
以上是关于如何在服务器端处理的数据表上使用搜索?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 jQuery dataTables 启用服务器端搜索?