bootstrap-Table:http://bootstrap-table.wenzhixin.net.cn/
页面
<div class="widget-content">
<div id="toolbar">
<a id="add" class="btn btn-default" href="/CompanyInfo/Add">
<i class="glyphicon glyphicon-plus"></i> 新建
</a>
</div>
<table id="table" class="table table-bordered dataTable"
data-toggle="table"
data-search="true"
data-toolbar="#toolbar"
data-url="@Url.Action("GetPageData")"
data-method="post"
data-content-type="application/x-www-form-urlencoded"
data-side-pagination="server"
data-pagination="true"
data-sort-name="CompanyName"
data-sort-order="asc"
data-query-params="queryParams">
<thead>
<tr>
<th data-field="CompanyName" data-sortable="true" data-halign="center">企业名称</th>
<th data-field="CompanyShort" data-sortable="true" data-halign="center">企业简称</th>
<th data-field="Address" data-sortable="true" data-halign="center">地址</th>
<th data-field="LinkName" data-sortable="true" data-halign="center">联系人</th>
<th data-field="LinkTel" data-sortable="true" data-halign="center">联系电话</th>
<th data-align="center" data-formatter="operateFormatter" data-width="60px"></th>
</tr>
</thead>
</table>
</div>
<link rel="stylesheet" href="~/Content/bootstrap-table.css" />
@section scripts
{
<script src="~/Scripts/bootstrap-table.js" type="text/javascript"></script>
<script src="~/Scripts/locales/bootstrap-table-zh-CN.js" type="text/javascript"></script>
<script src="~/Scripts/bootstrap.tables.js" type="text/javascript"></script>
<script type="text/javascript">
//设置传入参数
function queryParams(params) {
return params;
}
//操作按钮
function operateFormatter(value, row) {
return '<a href="@Url.Action(" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" Edit")/' + row.CompanyID + '"><i class="glyphicon glyphicon-edit"></i></a> ' +
'<a href="@Url.Action(" target="_blank" rel="external nofollow" target="_blank" rel="external nofollow" Delete")/' + row.CompanyID + '" οnclick="return confirm("确认删除?")"><i class="glyphicon glyphicon-remove"></i></a>';
}
</script>
}
控制器代码:
/// <summary>
/// 获取数据
/// </summary>
/// <returns></returns>
[HttpPost]
public JsonResult GetPageData()
{
//limit, offset, search, sort, order
//pageSize, pageNumber, searchText, sortName, sortOrder.
int pageSize = Convert.ToInt32(Request.Form["limit"]);
int pageNumber = Convert.ToInt32(Request.Form["offset"]);
string sortName = Request.Form["sort"];
string sortOrder = Request.Form["order"];
string searchText = Request.Form["search"];
int total;
var rows = String.IsNullOrEmpty(searchText)
? _service.GetPageData(sortName, sortOrder, pageNumber, pageSize, out total)
: _service.GetPageData(m => m.CompanyName.Contains(searchText), sortName, sortOrder, pageNumber, pageSize,
out total);
var json = Json(new { total, rows }, JsonRequestBehavior.AllowGet);
return json;
}
分页代码:
/// <summary>
/// 查找分页数据列表
/// </summary>
/// <param name="pageNumber">当前页</param>
/// <param name="pageSize">每页记录数</param>
/// <param name="totalRecord">总记录数</param>
/// <param name="predicate">查询表达式</param>
/// <param name="sortOrder">是否升序</param>
/// <param name="sortName">排序字段名称</param>
/// <returns>实例列表</returns>
public IQueryable<T> GetPageData<TS>(Expression<Func<T, bool>> predicate, string sortName, string sortOrder,
int pageNumber, int pageSize, out int totalRecord)
{
_nContext.Configuration.LazyLoadingEnabled = false;
_nContext.Configuration.ProxyCreationEnabled = false;
var list = _nContext.Set<T>().Where<T>(predicate);
totalRecord = list.Count();
list = OrderBy(list, sortName, sortOrder == "asc").Skip(pageNumber * pageSize).Take(pageSize);
_nContext.Configuration.LazyLoadingEnabled = true;
_nContext.Configuration.ProxyCreationEnabled = true;
return list;
}
/// <summary>
/// 查找分页数据列表
/// </summary>
/// <param name="pageNumber">当前页</param>
/// <param name="pageSize">每页记录数</param>
/// <param name="totalRecord">总记录数</param>
/// <param name="sortOrder">是否升序</param>
/// <param name="sortName">排序字段名称</param>
/// <returns>实例列表</returns>
public IQueryable<T> GetPageData<TS>(string sortName, string sortOrder, int pageNumber, int pageSize, out int totalRecord)
{
_nContext.Configuration.LazyLoadingEnabled = false;
_nContext.Configuration.ProxyCreationEnabled = false;
var list = GetList();
totalRecord = list.Count();
list = OrderBy(list, sortName, sortOrder == "asc").Skip(pageNumber * pageSize).Take(pageSize);
_nContext.Configuration.LazyLoadingEnabled = true;
_nContext.Configuration.ProxyCreationEnabled = true;
return list;
}
/// <summary>
/// 排序
/// </summary>
/// <typeparam name="T">类型</typeparam>
/// <param name="source">原IQueryable</param>
/// <param name="propertyName">排序属性名</param>
/// <param name="isAsc">是否正序</param>
/// <returns>排序后的IQueryable<T/></returns>
private static IQueryable<T> OrderBy(IQueryable<T> source, string propertyName, bool isAsc)
{
if (source == null) throw new ArgumentNullException("source", "不能为空");
if (string.IsNullOrEmpty(propertyName)) return source;
//Expression:提供一种基类,表示表达式目录树节点的类派生自该基类。
//创建一个 ParameterExpression 节点,该节点可用于标识表达式树中的参数或变量。
var parameter = Expression.Parameter(source.ElementType);
//创建一个表示访问属性的 MemberExpression
var property = Expression.Property(parameter, propertyName);
if (property == null) throw new ArgumentNullException("propertyName", "属性不存在");
var lambdaExpression = Expression.Lambda(property, parameter);
var methodName = isAsc ? "OrderBy" : "OrderByDescending";
var resultExpression = Expression.Call(typeof(Queryable), methodName, new[] { source.ElementType, property.Type }, source.Expression, Expression.Quote(lambdaExpression));
return source.Provider.CreateQuery<T>(resultExpression);
}