2017-09-23 7 views
1

私は自分のコードで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" />'); 
     }); 

しかし、私は、DataTableのは、検索欄の変化を検出することができないオプションを検索しようとしています。

EDIT

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

だから、まず、DataTableのサーバー側のコードを作成し、再利用可能なだけでなく、理想的に、あなたがナビゲートすることができます受信したパラメータのためのモデルを使用することになり、コードの量を減らすために受信したデータを簡単に。

したがって、以下の構造を含むモデル:ここでのパラメータの

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]の検索はnullのままでした。

ためのコントローラとして、あなたのようなもの使用することができます

[HttpPost] 
public ActionResult GetMyList (DataTableRequestModel model) 

をそしてmodel.search.valueまたは正規表現を使用するか、または列で、一般的な検索のためのモデルから値を取得します。

また、これは非常に役に立ちますpostをチェックアウトすることができます。

これは、実際にどのデータを受け取っているのかを正確に確認するために、デバッガを使用するのが理想的です。

関連する問題