2017-09-23 122 views
1

我已经在我的代码中设置了数据表,我从服务器使用下面的代码为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; 
     } 

你能帮我吗?

问候 阿布舍克

+0

添加getData()以供参考.. – Bharat

+0

@Bharat添加了更多详细信息的代码 – Abhishek

+0

您是否使用DataTable的默认搜索?当你搜索一些东西时会发生什么,你在服务器端的方法? – Bharat

回答

1

所以首先,为了使数据表服务器端代码可重用并减少代码量,理想情况下,你会使用的参数的模型获得,它允许您导航接收数据更容易。

因此,包含以下结构模型:

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这是很有帮助。

希望这会有所帮助,理想情况下,您将使用调试器来检查您收到的实际数据。