如何在服务器端处理的数据表上使用搜索?

Posted

技术标签:

【中文标题】如何在服务器端处理的数据表上使用搜索?【英文标题】:How to use search on datatables with server-side processing? 【发布时间】:2015-03-11 07:11:22 【问题描述】:

使用数据表时server-side 处理。搜索值如何传递给服务器?我查看了doc。

数据表自动将drawstartlength 发送到服务器。我可以而且应该用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 启用服务器端搜索?

使用 jquery 数据表进行服务器端处理,包括分页、过滤和搜索

DataTables 服务器端搜索输入

使用 Codeigniter 进行数据表服务器端处理

使用服务器端处理显示表中的数据

如何使用Laravel 5.2在数据表服务器端处理中执行算术计算?