代码之家  ›  专栏  ›  技术社区  ›  cannelle28

ASP。NET jquery数据表筛选

  •  0
  • cannelle28  · 技术社区  · 7 年前

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

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

    1 回复  |  直到 7 年前
        1
  •  0
  •   Mannan Bahelim    7 年前

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