在Jquery Data表上自定义筛选并重新分配AjaxSource

时间:2016-03-17 10:23:44

标签: jquery asp.net-mvc-3 datatables

我的应用程序在Asp.net MVC3中,我添加了Jquery Datatable,它在默认加载时工作正常。但我想将自定义过滤添加到实现数据表的索引页面。 下面是示例代码,但这正是我使用Data-table实现索引View的方式。

  var oTable1 = $('.My_Table_Class').dataTable({
            "bServerSide": true,
            "sAjaxSource": "/CityMaster/AjaxCityFill",
            "bProcessing": true,
            "sScrollY": "300px",
            aaSorting: [[0, 'desc']],
            "b$UI": true,
            "bAutoWidth": true,
            "sPaginationType": "full_numbers",
            "sDom": '<"dtShowPer"l><"dtFilter"f><"#dataTables_filter_search_button"><"dtInfo"i><"dtPagination"p><"dtTables">rt<"dtInfo"i><"dtPagination"p><"F">',
            "oLanguage": {
                "sLengthMenu": "Display _MENU_ records per page",
                "sZeroRecords": "Nothing found - sorry",
                "sInfo": "Showing _START_ to _END_ of _TOTAL_ records",
                "sInfoEmpty": "Showing 0 to 0 of 0 records",
                "sInfoFiltered": ""
            }
        });

Above方法将从此查询中获取数据

"Select * from CityMaster"

索引视图上方会有选择过滤器,如CountryName,CityName,CountryCode 我想要实现的是:

  1. 我想将网址重新分配给 sAjaxSource ,这将从接受“CountryName”,“CityName”等参数的方法中获取数据 像这样

    sAjaxSource": "/CityMaster/AjaxCityFillWithFilter?CountryName=India&CityName=Maharashtra,
    
  2. 以下是我尝试过的事情

     1. var oSettings = oTable1.fnSettings();
        oSettings.sAjaxSource  = "/CityMaster/AjaxCityFillWithFilter?  CountryName=India&CityName=Maharashtra;
    
     2. oTable1.ajax.url("/CityMaster/AjaxCityFillWithFilter?        CountryName=India&CityName=Maharashtra).load();
    

    上述方法均无效。

    更新 在实现@EuphoriaGrogi提供的以下答案之后,以下是我得到的错误 1。When i add As DataTable i get this error

    so i change it to dataTable and again i get the error that .draw is not a function

1 个答案:

答案 0 :(得分:0)

数据表中有一个属性,您可以在其中指定过滤器fnServerParams

"fnServerParams": function (aoData) {
      aoData.push({ "name": "sBookTitle", "value": $("#Book_Title").val() });
      aoData.push({ "name": "sAuthor", "value": $("#Author").val() });
 },

假设您有一个Search按钮,它将触发事件监听器中的搜索,只需重新绘制表格。

$("#searchBtn").on("click", function () {
        var bookResultsTable = $('#bookResultsTable').DataTable();
        bookResultsTable.draw();
    });

这将自动调用传递过滤器值的ajax源。

在我的控制器中,您可以在请求参数中检索过滤器的值。

    public ActionResult BookListHandler(JQueryDataTableParamModel param , FormCollection values)
    {
        var filterBookTitle = Request.Params[Constants.Book_Title_Param].Trim() ?? string.Empty;
        var filterAuthor = Request.Params[Constants.Author_Param].Trim() ?? string.Empty;
        ... // rest of code here
    }