2017-09-22 53 views
0

我很新的ASP.NET和尝试建立购物应用程序。我使用jquery.datatable和Ajax显示在表店里的所有项目:ASP.NET的jQuery数据过滤

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

而且在CategoryController:

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

     return View(categories); 
    } 

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

+0

查看https://datatables.net/reference/option/ajax – Shoe

回答

0

你只需要添加下面的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); 
      }