亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > .NET > 正文

ASP.Net MVC+Data Table實現分頁+排序功能的方法

2024-07-10 13:32:25
字體:
來源:轉載
供稿:網友

本文實例講述了ASP.Net MVC+Data Table實現分頁+排序功能的方法。分享給大家供大家參考,具體如下:

實現思路:

使用datatable內置的分頁,排序
使用attribute+反射來控制需要排序和顯示的字段以及順序
分離排序和顯示邏輯
若要添加搜索邏輯只需要傳遞搜索的字段到后端即可(js初始化時把"searching": false拿掉)。

View :

@using BCMS.BusinessLogic@using BCMS.BusinessLogic.Models@model List<BusCaptainObj><table id="tblData" class="table table-striped">  <thead>    <tr class="data-list">      <th style="width:10%;">@Html.DisplayNameFor(model => model.First().PersNo)</th>      <th style="width:30%;">@Html.DisplayNameFor(model => model.First().Personnel_Name)</th>      <th style="width:20%;">@Html.DisplayNameFor(model => model.First().Position)</th>      <th style="width:20%;">@Html.DisplayNameFor(model => model.First().Interchange)</th>      <th style="width:20%;">Action</th>    </tr>  </thead></table>@section scripts {  <script type="text/javascript">     @{       var columns = DataTableHelper.DisplayColumns<BusCaptainObj>();     }    $(document).ready(function () {      $('#tblData').dataTable({        "processing": true,        "serverSide": true,        "searching": false,        "stateSave": true,        "oLanguage": { "sInfoFiltered": "" },        "ajax": {          "url": @Url.Action("GetJsonData"),          "type": "GET"        },        "columns": [          { "data": "@columns[0]" },          { "data": "@columns[1]" },          { "data": "@columns[2]" },          { "data": "@columns[3]" },          {            "data": "@columns[0]",            "orderable": false,            "searchable": false,            "render": function (data, type, full, meta) {              if (type === 'display') {                return GetDetailButton("/BusCaptain/Detail?bcId=", data) + GetInfoButton("/Telematics?bcId=", data, "Performance");              } else { return data; }            }          }        ],        "order": [[0, "asc"]]      });    });  </script>}

Controller :

public ActionResult GetJsonData(int draw, int start, int length){  string search = Request.QueryString[DataTableQueryString.Searching];  string sortColumn = "";  string sortDirection = "asc";  if (Request.QueryString[DataTableQueryString.OrderingColumn] != null)  {    sortColumn = GetSortColumn(Request.QueryString[DataTableQueryString.OrderingColumn]);  }  if (Request.QueryString[DataTableQueryString.OrderingDir] != null)  {    sortDirection = Request.QueryString[DataTableQueryString.OrderingDir];  }  DataTableData dataTableData = new DataTableData();  dataTableData.draw = draw;  int recordsFiltered = 0;  dataTableData.data = BusCaptainService.Instance.SearchMyBuscaptains(User.Identity.Name, out recordsFiltered, start, length, sortColumn, sortDirection, search).Data;  dataTableData.recordsFiltered = recordsFiltered;  return Json(dataTableData, JsonRequestBehavior.AllowGet);}public string GetSortColumn(string sortColumnNo){  var name = DataTableHelper.SoringColumnName<BusCaptainObj>(sortColumnNo);  return name;}public class DataTableData{  public int draw { get; set; }  public int recordsFiltered { get; set; }  public List<BusCaptainObj> data { get; set; }}

Model :

class XXX{...  [DisplayColumn(0)]    [SortingColumn(0)]    public int? A { get; set; }    [DisplayColumn(1)]    [SortingColumn(1)]    public string B { get; set; }...}

Helper class :

public class SortingColumnAttribute : Attribute{    public int Index { get; }    public SortingColumnAttribute(int index)    {      Index = index;    }}public class DisplayColumnAttribute : Attribute{    public int Index { get; }    public DisplayColumnAttribute(int index)    {      Index = index;    }}public static class DataTableQueryString{    public static string OrderingColumn = "order[0][column]";    public static string OrderingDir = "order[0][dir]";    public static string Searching = "search[value]";}public static class DataTableHelper{    public static IList<string> DisplayColumns<T>()    {      var result = new Dictionary<int, string>();      var props = typeof(T).GetProperties();      foreach (var propertyInfo in props)      {        var propAttr =          propertyInfo            .GetCustomAttributes(false)            .OfType<DisplayColumnAttribute>()            .FirstOrDefault();        if (propAttr != null)        {          result.Add(propAttr.Index,propertyInfo.Name);        }      }      return result.OrderBy(x => x.Key).Select(x => x.Value).ToList();    }    public static string SoringColumnName<T>(string columnIndex)    {      int index;      if (!int.TryParse(columnIndex, out index))      {        throw new ArgumentOutOfRangeException();      }      return SoringColumnName<T>(index);    }    public static string SoringColumnName<T>(int index)    {      var props = typeof(T).GetProperties();      foreach (var propertyInfo in props)      {        var propAttr =          propertyInfo            .GetCustomAttributes(false)            .OfType<SortingColumnAttribute>()            .FirstOrDefault();        if (propAttr != null && propAttr.Index == index)        {          return propertyInfo.Name;        }      }      return "";    }}

Query:

...var query = context.BusCaptains            .Where(x => ...)            .OrderByEx(sortDirection, sortField)            .Skip(start)            .Take(pageSize);...

LINQ Helper :

...public static IQueryable<T> OrderByEx<T>(this IQueryable<T> q, string direction, string fieldName)    {      try      {        var customProperty = typeof(T).GetCustomAttributes(false).OfType<ColumnAttribute>().FirstOrDefault();        if (customProperty != null)        {          fieldName = customProperty.Name;        }        var param = Expression.Parameter(typeof(T), "p");        var prop = Expression.Property(param, fieldName);        var exp = Expression.Lambda(prop, param);        string method = direction.ToLower() == "asc" ? "OrderBy" : "OrderByDescending";        Type[] types = new Type[] {q.ElementType, exp.Body.Type};        var mce = Expression.Call(typeof(Queryable), method, types, q.Expression, exp);        return q.Provider.CreateQuery<T>(mce);      }      catch (Exception ex)      {        _log.ErrorFormat("error form OrderByEx.");        _log.Error(ex);        throw ;      }    }...

希望本文所述對大家asp.net程序設計有所幫助。


注:相關教程知識閱讀請移步到ASP.NET教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品一区二区三区四区| 国产精品va在线播放| 日韩成人性视频| 日韩欧美精品免费在线| 欧美激情一级欧美精品| 久久91精品国产91久久跳| 久久久成人精品| 97免费中文视频在线观看| 久久的精品视频| 久久免费观看视频| 欧美性猛交xxxx久久久| 亚洲精品影视在线观看| 91在线视频一区| 久久久成人的性感天堂| 久久国产精品久久久| 欧美大肥婆大肥bbbbb| 国产一区二区三区在线| 亚洲美女又黄又爽在线观看| 亚洲精品天天看| 日韩在线免费视频| 欧美尤物巨大精品爽| 欧美亚洲国产成人精品| 亚洲欧美国产精品专区久久| 亚洲精品视频在线观看视频| 欧美情侣性视频| 欧美精品videossex性护士| 国产精品视频资源| 日韩专区在线观看| 午夜精品美女自拍福到在线| 8x拔播拔播x8国产精品| 国产精品www色诱视频| 国产综合视频在线观看| 久久久久久久国产| 日韩中文字幕av| 国产精品麻豆va在线播放| 日韩电影在线观看免费| 欧美成人在线免费视频| 97在线日本国产| 亚洲国产精品视频在线观看| 综合网日日天干夜夜久久| 亚洲精品之草原avav久久| 青青a在线精品免费观看| 国产主播精品在线| 欧美黑人极品猛少妇色xxxxx| 正在播放亚洲1区| 亚洲精品午夜精品| 日韩欧美高清视频| 欧美成人sm免费视频| 91av在线免费观看视频| 国产精品看片资源| 91精品视频大全| 精品福利在线视频| 欧美性猛交xxxx乱大交| 北条麻妃一区二区三区中文字幕| 韩国三级日本三级少妇99| 亚洲国产成人91精品| 91在线观看欧美日韩| 国产精品久久久久福利| 国产自产女人91一区在线观看| 国产日产欧美精品| 欧美高清在线视频观看不卡| 国产日韩综合一区二区性色av| 91成人在线视频| 伦伦影院午夜日韩欧美限制| 国产一区二区在线免费视频| 欧美一级高清免费播放| 91精品国产自产在线老师啪| 久久久午夜视频| 亚洲欧美另类在线观看| 欧美激情伊人电影| 国产在线视频一区| 国产亚洲欧洲高清一区| 91人人爽人人爽人人精88v| 国产成人啪精品视频免费网| 亚洲精品国产品国语在线| 亚洲一区二区三区在线视频| 亚洲欧美日韩天堂一区二区| 国产精品日韩在线一区| 欧美主播福利视频| 亚洲欧美在线第一页| 亚洲日本成人女熟在线观看| 97免费视频在线播放| 国产男女猛烈无遮挡91| 青青青国产精品一区二区| 亚洲高清色综合| 成人午夜在线观看| 国模叶桐国产精品一区| 色综合天天狠天天透天天伊人| 亚洲欧美日韩成人| 亚洲一区二区三区乱码aⅴ| www.午夜精品| 深夜福利一区二区| 亚洲精品少妇网址| 日本中文字幕不卡免费| 欧美壮男野外gaytube| 不卡av日日日| 亚洲欧美日韩另类| 欧美日韩人人澡狠狠躁视频| 韩国欧美亚洲国产| 91精品国产自产在线| 91亚洲精品久久久| 国产精品亚洲第一区| 亚洲一区二区三区乱码aⅴ蜜桃女| 亚洲综合精品伊人久久| 色先锋资源久久综合5566| 91免费精品视频| 精品国产一区二区三区久久| 日韩久久免费电影| 精品自拍视频在线观看| 亚洲已满18点击进入在线看片| 国产精品久久久久久久久| 九九视频这里只有精品| 精品国内自产拍在线观看| 最近2019免费中文字幕视频三| 日韩精品一区二区视频| 国产一区二区三区高清在线观看| 国产在线观看精品一区二区三区| 欧美一区二区三区艳史| 中文综合在线观看| 久久久999精品免费| 俺去了亚洲欧美日韩| 欧美国产视频一区二区| 中文字幕一区二区三区电影| 97超视频免费观看| 庆余年2免费日韩剧观看大牛| 91爱爱小视频k| 国产精品高清在线观看| 欧美在线一级视频| 琪琪第一精品导航| 亚洲午夜久久久久久久| 国产精品男女猛烈高潮激情| 欧美黄色片视频| 亚洲97在线观看| 日本在线观看天堂男亚洲| 国产成人精品免高潮费视频| 日本视频久久久| 在线日韩av观看| 久久国产精品电影| 美女少妇精品视频| 国产精品丝袜一区二区三区| 最近免费中文字幕视频2019| 亚洲三级免费看| 精品视频9999| 欧美日韩国产精品一区二区三区四区| 国产精品综合久久久| 精品久久久久久中文字幕大豆网| 亚洲精品视频网上网址在线观看| 中文字幕v亚洲ⅴv天堂| 国产精品久久久久久久久久久新郎| 97色在线视频| 亚洲aⅴ男人的天堂在线观看| 欧美高清视频免费观看| 日韩欧美一区视频| 久久伊人精品天天| 国产精品一区二区三区毛片淫片| 欧美成年人在线观看| 疯狂蹂躏欧美一区二区精品| 5252色成人免费视频| 欧美成人精品三级在线观看| 国产欧美韩国高清| 国产亚洲精品久久久久久| 亚洲护士老师的毛茸茸最新章节| 欧美激情中文网| 午夜精品三级视频福利|