datatables搜索不工作服务器端
问题描述:
我已经在我的代码中设置了数据表,我从服务器使用下面的代码为jquery获取值。datatables搜索不工作服务器端
我使用的代码如下: -
var dt = $(".ajaxTable").DataTable({
ajax: getData,
// lengthChange: false,
serverSide: true,
processing: true,
searching: true,
"responsive": true,
"filter":true,
"sDom": '"<"right_fter"<"serch_xop"fp>>t<"bottom_tb_Pl"il><"clear">',
"bPagingType": "first_last_numbers",
// "bPaginate": false,
order: [],
columnDefs: [
{ orderable: false }
],
language: {
paginate: {
},
"search": '',
"searchPlaceholder":'Search property…'
},
pageLength: pageSize,
"columns": [
{
render: propertyFavorite, className: "column-center" },
{ "data": "RoofLinkText", className:"key", render: editLink },
{ "data": "Address" },
{ "data": "City" },
{ "data": "State" },
{ "data": "Code" },
{ "data": "Market" },
{ "data": "CompanyName" },
{ render:actionLink, orderable:false, className:"actions" }
],
order: [[1, "asc"]],
});
$(".dataTables_wrapper .right_fter").prepend('<div class="title_bar">Properties</div>');
dt.columns().iterator('column', function (ctx, idx) {
$(dt.column(idx).header()).append('<span class="sort-icon" />');
});
但是,当我试图寻找该选项的数据表是不能够检测在搜索栏的变化。
编辑
var getData = rm.configData({
tableSel: '.ajaxTable',
url: listUrl,
formatter: function (o) {
//console.log(o.TotalRecords);
return {
"recordsTotal": o.TotalRecords,
"recordsFiltered": o.TotalRecords,
"data": o.Properties
}
}
})
服务器端代码
public ActionResult List(
string sort = "RoofName",
bool sortAsc = true,
string search = null,
int page = 1,
int pageSize = 10,
string company = null,
string region = null,
string market = null,
string message = null)
{
Domain.Models.User user = Account.AccountManager.GetCurrentUser();
if (String.IsNullOrEmpty(region) && !String.Equals("all", user.Region, StringComparison.OrdinalIgnoreCase))
region = user.Region;
if (String.IsNullOrEmpty(market) && !String.Equals("all", user.Market, StringComparison.OrdinalIgnoreCase))
market = user.Market;
var model = new PropertySearchViewModel();
model.Sort = sort;
model.SortAsc = sortAsc;
model.Search = search;
model.Page = page;
model.PageSize = pageSize;
model.FilterCompanies = company;
model.FilterRegions = region;
model.FilterMarkets = market;
int[] companyIDs = ParamHelper.ToIntArray(model.FilterCompanies);
string[] regions = ParamHelper.ToStringArray(model.FilterRegions);
string[] markets = ParamHelper.ToStringArray(model.FilterMarkets);
if (model.Page == 0) model.Page = 1;
int totalRecords;
IEnumerable<RM.Domain.Models.Search.PropertySearch> properties = _roofData.Search(
page,
model.PageSize,
out totalRecords,
model.Sort,
model.SortAsc,
model.Search,
companyIDs,
regions,
markets,
user.UserID,
user.AssetManager,
user.PropertyManager,
user.RoofGroup,
null);
model.Properties = SearchPropertyModel.FromProperty(properties);
model.TotalRecords = totalRecords;
if (model.Page > model.TotalPages)
model.Page = 1;
JsonResult result = Json(model, JsonRequestBehavior.AllowGet);
return result;
}
你能帮我吗?
问候 阿布舍克
答
所以首先,为了使数据表服务器端代码可重用并减少代码量,理想情况下,你会使用的参数的模型获得,它允许您导航接收数据更容易。
因此,包含以下结构模型:
public class DataTableRequestModel
{
public int draw { get; set; }
public int start { get; set; }
public int length { get; set; }
public List<Column> columns { get; set; }
public Search search { get; set; }
public List<Order> order { get; set; }
}
public class Column
{
public string data { get; set; }
public string name { get; set; }
public bool searchable { get; set; }
public bool orderable { get; set; }
public Search search { get; set; }
}
public class Search
{
public string value { get; set; }
public string regex { get; set; }
}
public class Order
{
public int column { get; set; }
public string dir { get; set; }
}
全部列表的参数在这里:https://datatables.net/manual/server-side
至于控制器,为了使搜索工作,我不得不使用POST请求,与GET请求一样,搜索[value]保留为空。
因此作为控制器,你可以使用类似:
[HttpPost]
public ActionResult GetMyList (DataTableRequestModel model)
而且通过使用model.search.value或正则表达式或列得到型号为通用搜索的值。
此外,你可以看看这post这是很有帮助。
希望这会有所帮助,理想情况下,您将使用调试器来检查您收到的实际数据。
添加getData()以供参考.. – Bharat
@Bharat添加了更多详细信息的代码 – Abhishek
您是否使用DataTable的默认搜索?当你搜索一些东西时会发生什么,你在服务器端的方法? – Bharat