欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

如何使用Asp.Net MVC分页、检索排序整体实现代码

来源:本站整理 作者:佚名 时间:2017-03-06 TAG: 我要投稿

很多时候需要这样的功能,对表格进行分页、排序和检索。这个有很多实现的方式,有现成的表格控件、用前端的mvvm,用户控件。但很多时候看着很漂亮的东西你想进一步控制的时候却不那么如意。这里自己实现一次,功能不是高大全,但求一个清楚明白,也欢迎园友拍砖。前端是bootstrap3+jPaginate,后台基于membership。没什么难点。
先上效果图。

分页其实就是处理好 每页项目数、总项目数、总页数、当前页。为了方便复用,就先从仓库开始说起。
一、建立仓库
1.定义Ipager接口,需要分页的模型仓库继承这个接口
namespace Protal.Model.Abstract
{
 ///
 /// 分页处理
 ///
 public interface IPager
 {
  ///
  /// 每页项目数
  ///
  /// The page item count.
  int PageItemCount { get; set; }
  ///
  /// 总页数
  ///
  /// The totoal page.
  int TotoalPage { get; }
  ///
  /// 显示的页数
  ///
  /// The display page.
  int DisplayPage { get; set; }
  ///
  /// 满足条件的总数目
  ///
  int TotalItem { get; set; }
 }
}
2.定义IUsersRepository,主要处理User 相关的业务逻辑。Find函数是主要的查询方法,order表示顺反排序。
 public interface IUsersRepository : IPager
 {
  ///
  /// Post list
  ///
  ///
Order expression
  ///
Filter expression
  ///
Records to skip
  ///
Records to take
  /// List of users
  IEnumerableUser> Find(int order=0,string filter="", int skip = 0, int take = 10);
  ///
  /// Get single post
  ///
  ///
User id
  /// User object
  User FindByName(string name);
  ///
  /// Add new user
  ///
  ///
Blog user
  /// Saved user
  User Add(User user);
  ///
  /// Update user
  ///
  ///
User to update
  /// True on success
  bool Update(User user);
  ///
  /// Save user profile
  ///
  ///
Blog user
  /// True on success
  bool SaveProfile(User user);
  ///
  /// Delete user
  ///
  ///
User ID
  /// True on success
  bool Remove(string userName);
 }
二、仓库的实现和绑定
主要方法:Membership的中的User和我们自定义的不一样,所以存在一个转换
 public class UsersRepository : IUsersRepository
 {
  ///
  /// The _user list
  ///
  private ListUser> _userList = new ListUser>();
  ///
  /// The _page item count
  ///
  private int _pageItemCount;
  ///
  /// The _display page
  ///
  private int _displayPage;
  ///
  /// The _usercount
  ///
  private int _usercount;
  ///
  /// The _total item
  ///
  private int _totalItem;
  ///
  /// 标记是否有查询条件 没有的话则返回全部数目
  ///
  private FuncUser, bool> _func;
  ///
  /// Gets or sets the users.
  ///
  /// The users.
  public ListUser> Users
  {
   get
   {
    int count;
    var usercollection = Membership.GetAllUsers(0, 999, out count);
    if (count == _usercount) return _userList;
    _usercount = count;
    var members = usercollection.CastMembershipUser>().ToList();
    foreach (var membershipUser in members)//这里存在一个转换
    {
     _userList.Add(new User
     {
      Email = membershipUser.Email,
      UserName = membershipUser.UserName,
      //roles password
     });
    }
    return _userList;
   }
   set { _userList = value; }
  } 
//查询
public IEnumerableUser> Find(int order = 0, string filter = "", int skip = 0, int take = 10)
  {
   if (take == 0) take = Users.Count;
   //过滤
   _func = string.IsNullOrEmpty(filter) ? (FuncUser, bool>) (n => n.UserName != "") : (n => n.UserName.Contains(filter));
   var users = Users.Where(_func).ToList();
   //更新总数目
   _totalItem = users.Count;

[1] [2] [3] [4] [5]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载