2017-09-23 4 views
1

J'ai mis en place des données dans mon code et j'obtiens les valeurs du serveur en utilisant le code suivant pour jquery.recherche de données ne fonctionne pas côté serveur

Le code que je utilise est comme ci-dessous: -

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" />'); 
     }); 

Mais quand je suis en train de chercher l'option la datatables ne parvient pas à détecter un changement dans la colonne de recherche.

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 

       }    
      } 
     }) 

SERVEUR CODE CÔTÉ

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; 
     } 

Pouvez-vous me aider s'il vous plaît cela?

Cordialement Abhishek

+0

Ajouter getData() comme référence .. – Bharat

+0

@Bharat Ajouté le code pour plus de détails – Abhishek

+0

utilisez-vous la recherche par défaut de DataTable? Que se passe-t-il lorsque vous recherchez quelque chose, êtes-vous touché par la méthode côté serveur? – Bharat

Répondre

1

donc d'abord, afin de rendre le code côté serveur DataTable réutilisable ainsi que de réduire la quantité de code, vous idéalement utiliser un modèle pour les paramètres reçus qui vous permet de naviguer dans le reçu des données plus facile.

Par conséquent, un modèle contenant la structure suivante:

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; } 
} 

Liste complète des paramètres ici: https://datatables.net/manual/server-side

En ce qui concerne le contrôleur, pour la recherche de travail, je devais utiliser POST demande, comme pour la requête GET, la recherche [valeur] était nulle.

donc en tant que contrôleur, vous pouvez utiliser quelque chose comme:

[HttpPost] 
public ActionResult GetMyList (DataTableRequestModel model) 

Et obtenir les valeurs du modèle pour la recherche générique en utilisant le model.search.value ou regex ou par des colonnes.

En outre, vous pouvez vérifier ce post qui est très utile.

J'espère que cela vous aidera, idéalement, vous utiliseriez le débogueur afin de vérifier les données réelles que vous recevez quelles données vous obtenez exactement.