如何在服务器端处理数据表格中使用搜索功能?

5

当使用DataTable进行服务器端处理时,搜索值是如何传递到服务器的?我查看了文档

DataTable会自动向服务器发送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;
}
5个回答

6

您不应该使用搜索作为参数。但它会自动成为您的查询字符串的一部分。

public JsonResult GetJsonData(string draw, int start, int length)
{
     string search = Request.QueryString["search[value]"];
     // your code for search filtering

}

thanks ravi


你可以使用Url请求而不是params来处理参数。 - Elaine

5
我使用这个,因为它从未是null,而是一个空字符串。
Request.Form.GetValues("search[value]")[0]

3

如果你想在服务器端获取搜索框的值:

字符串search = Request.Form.GetValues("search[value]").FirstOrDefault();

这将给你搜索框的值。


1
根据文档所述,datatables会传递一个包含两个值的搜索数组。search[value]是用于过滤的搜索字符串,search[regex]则只是一个布尔值,表示是否将search[value]解释为正则表达式或普通字符串。
如果您正在搜索特定列中的值,则搜索字符串将位于columns[i][search][value]中。

那么我的操作参数是错误的吗?它不应该是 string search 而是 string[] search 吗? - radbyx
我现在尝试使用 string[] search,但仍然为空。 - radbyx
文档中说:“应用于所有具有可搜索为真的列。” 我应该添加这个对吗? - radbyx

1
如果search[value]参数始终为null,请确保在客户端使用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

}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接