ASP.NET jquery 数据表过滤

ASP.NET jquery datatable filtering

我是 ASP.NET 的新手,正在尝试构建购物应用程序。我正在使用 jquery.datatable 和 ajax 来显示 table:

商店中的所有商品

@model IEnumerable<OnlineShoppingApp.Models.Category>

@{
    ViewBag.Title = "Index";
    Layout = "~/Views/Shared/_Layout.cshtml";
}

<div class="col-md-2">
    <ul id="categories">
        @foreach(var category in Model)
        {
            <li data-category-id="@category.Id">@category.Name</li>
        }
    </ul>
</div>
<div class="col-md-10">
    <table id="items" class=" table table-bordered table-hover">
        <thead>
            <tr>
                <th>Name</th>
                <th>Description</th>
                <th>Price</th>
                <th>Category</th>
            </tr>
        </thead>
        <tbody></tbody>
    </table>
</div>

@section Scripts {
    <script>
        $(document).ready(function () {
            $("#items").DataTable(
                {
                    ajax:
                    {
                        url: "/api/items",
                        dataSrc: ""
                    },
                    columns:
                    [
                        {
                            data: "Name",
                        },
                        {
                            data: "Description",
                        },
                        {
                            data: "Price",
                        },
                        {
                            data: "Category.Name",
                        }
                    ]
                }
            )

            $("li").click(function () {
                var element = $(this);
            });
        });

    </script>
    }

并且在类别控制器中:

        public ActionResult Index()
    {
        var categories = context.Categories.ToList();

        return View(categories);
    }

在左侧,我列出了所有类别,当单击一个类别时,我想过滤此数据table以仅显示与所选类别匹配的项目。我不想重新加载页面,而且我不知道从哪里开始。

您只需要在您的布局中添加以下CSS和js文件

 //cdn.datatables.net/1.10.9/css/jquery.dataTables.min.css
 //cdn.datatables.net/1.10.9/js/jquery.dataTables.min.js

现在在您的项目页面中添加以下代码

 <script>
        $(document).ready(function () {
            $("#items").DataTable({
                "processing": true, // for show progress bar
                "serverSide": true, // for process server side
                "filter": false, // this is for disable filter (search box)
                "orderMulti": false, // for disable multiple column at once
                "ajax": {
                    "url": "/api/items",
                    "type": "POST",
                    "datatype": "json"
                },
                "columns": [
                        { "data": "Name", "name": "Name", "autoWidth": true },
                        { "data": "Description", "name": "Description", "autoWidth": true },
                        { "data": "Price", "name": "Price", "autoWidth": true },
                        { "data": "CategoryName", "name": "CategoryName", "autoWidth": true }

                ]
            });
        });
    </script>

控制器代码。

[HttpPost]
        public ActionResult items()
        {

            var draw = Request.Form.GetValues("draw").FirstOrDefault();
            var start = Request.Form.GetValues("start").FirstOrDefault();
            var length = Request.Form.GetValues("length").FirstOrDefault();
            //Find Order Column
            var sortColumn = Request.Form.GetValues("columns[" + Request.Form.GetValues("order[0][column]").FirstOrDefault() + "][name]").FirstOrDefault();
            var sortColumnDir = Request.Form.GetValues("order[0][dir]").FirstOrDefault();


            int pageSize = length != null? Convert.ToInt32(length) : 0;
            int skip = start != null ? Convert.ToInt32(start) : 0;
            int recordsTotal = 0;

                var v= context.Categories.ToList();

                //SORT
                if (!(string.IsNullOrEmpty(sortColumn) && string.IsNullOrEmpty(sortColumnDir)))
                {
                    v = v.OrderBy(sortColumn + " " + sortColumnDir);
                }

                recordsTotal = v.Count();
                var data = v.Skip(skip).Take(pageSize).ToList();
                return Json(new { draw = draw, recordsFiltered = recordsTotal, recordsTotal = recordsTotal, data = data }, JsonRequestBehavior.AllowGet);
            }