這塊進行用戶管理,可以瀏覽、查詢已注冊的用戶,修改用戶資料,刪除用戶等。沒有做添加用戶,不知是否必要。列表頁還是使用easyui的datagrid。這個思路跟用戶組的方式差不多。
1、接口InterfaceUser 命名空間Ninesky.Repository
功能查詢用戶,修改用戶資料(這里考慮到用戶登錄也需要修改登錄日期,所以放着吧)。
using Ninesky.Models; namespace Ninesky.Repository { /// <summary> /// 用戶接口 /// <remarks> /// 版本:v1.0 /// 創建:2013.12.24 /// 修改:2014.1.11 /// </remarks> /// </summary> interface InterfaceUser { /// <summary> /// 查找用戶 /// </summary> /// <param name="userId">用戶Id</param> /// <returns>用戶信息</returns> User Find(int userId); /// <summary> /// 修改用戶信息 /// </summary> /// <param name="user">用戶信息</param> /// <returns>布爾值</returns> bool Modify(User user); } }
先后寫具體實現代碼類。
using Ninesky.Models; using System.Linq; namespace Ninesky.Repository { public class UserRepository { protected NineskyContext nineskyContext = new NineskyContext(); public User Find(int userId) { return nineskyContext.Users.SingleOrDefault(u => u.UserId == userId); } public bool Modify(User user) { nineskyContext.Users.Attach(user); nineskyContext.Entry<User>(user).State = System.Data.EntityState.Modified; return nineskyContext.SaveChanges() > 0; } }
2、添加后台接口InterfaceUser 繼承自Ninesky.Repository.InterfaceUser,命名空間為Ninesky.Areas.Admin.Repository。
這里Find方法返回的數據提供給datagrid使用由於,要用到分頁所以返回數據必須包含總記錄數因此構造了DatagridPagingViewModle這個視圖模型。
using Ninesky.Models; namespace Ninesky.Areas.Admin.Repository { /// <summary> /// 用戶接口 /// <remarks> /// 版本:v1.0 /// 創建:2013.12.24 /// 修改:2014.1.11 /// </remarks> /// </summary> interface InterfaceUser:Ninesky.Repository.InterfaceUser { /// <summary> /// 刪除用戶 /// </summary> /// <param name="userId">用戶Id</param> /// <returns>布爾值</returns> bool Del(int userId); /// <summary> /// 查找用戶列表 /// </summary> /// <param name="userName">用戶名(可以為一部分)</param> /// <param name="groupId">用戶組。大於0時有效</param> /// <param name="pageInde">當前頁。和pageSize同時大於0時有效</param> /// <param name="pageSize">每頁記錄數。和pageInde同時大於0時有效</param> /// <returns>DatagridPagingViewModle類型的用戶列表</returns> DatagridPagingViewModle Find(string userName, int groupId, int pageInde, int pageSize); } }
實現的庫類
using Ninesky.Models; using System.Linq; namespace Ninesky.Areas.Admin.Repository { /// <summary> /// 后台用戶 /// 版本:v1.0 /// 創建:2014.1.8 /// 修改:2014.1.9 /// </summary> public class UserRepository:Ninesky.Repository.UserRepository,InterfaceUser { public DatagridPagingViewModle Find(string userName, int groupId, int pageInde, int pageSize) { DatagridPagingViewModle _datagridPagingData = new DatagridPagingViewModle(); IQueryable<User> _users = nineskyContext.Users.OrderByDescending(u => u.RegTime); if (!string.IsNullOrEmpty(userName)) _users = _users.Where(u => u.UserName.Contains(userName)); if (groupId > 0) _users = _users.Where(u => u.GroupId == groupId); if (pageInde > 0 && pageSize > 0) { _datagridPagingData.total = _users.Count(); _datagridPagingData.rows = _users.Skip((pageInde - 1) * pageSize).Take(pageSize); } return _datagridPagingData; } public bool Del(int userId) { var _user = new User { UserId = userId }; nineskyContext.Users.Attach(_user); nineskyContext.Entry<User>(_user).State = System.Data.EntityState.Deleted; return nineskyContext.SaveChanges() > 0; } } }
3、控制器。由於在用戶組部分添加了用戶控制器,這里直接打開。UserController
添加List方法。
/// <summary> /// 用戶列表 /// </summary> /// <returns>局部視圖</returns> public ActionResult List() { return PartialView(); }
這里繼續使用datagrid 的ajax方式加載,還要添加ListJson函數用來返回json數據
/// <summary> /// 用戶列表Json /// </summary> /// <param name="userName">用戶名</param> /// <param name="groupId">用戶組</param> /// <param name="page">頁碼</param> /// <param name="rows">每頁行數</param> /// <returns>DatagridPagingViewModle的Json格式</returns> public JsonResult ListJson(string userName, int groupId = 0, int page = 1, int rows = 20) { return Json(userRepository.Find(userName, groupId, page, rows)); }
OK。在List action上右鍵添加局部視圖
<div class="c_navbar">后台管理 >> 用戶管理</div> <div class="fs_wapper"> <div class="header"></div> <div> <table id="userDataGrid" class="easyui-datagrid" data-options="url:'@Url.Action("ListJson", "User")',fitColumns:true,singleSelect:true,toolbar:'#toolbar',pagination:true,onDblClickRow:function(){SetCenter('@Url.Content("~/Admin/User/Index")/'+($(this).datagrid('getSelected').UserId));}"> <thead> <tr> <th data-options="field:'UserName'">用戶名</th> <th data-options="field:'GroupId',formatter: function(value,row,index){return Group(value);}">用戶組</th> <th data-options="field:'Email'">Email</th> <th data-options="field:'QQ'">QQ號碼</th> <th data-options="field:'Tel'">電話號碼</th> <th data-options="field:'RegTime',formatter: function(value,row,index){return jsonDateFormat(value);}">注冊時間</th> <th data-options="field:'LastLoginTime',formatter: function(value,row,index){return jsonDateFormat(value);}">上次登錄時間</th> </tr> </thead> </table> <div id="toolbar"> 用戶名:<input id="userName" type="text" style="width:60px; height:16px;" /> 用戶組:<input id="usergroup" class="easyui-combobox" data-options="textField:'Name',valueField:'UserGroupId',url:'@Url.Action("ListJson", "UserGroup")'" /> <a id="userSearch" class="easyui-linkbutton">查詢</a> </div> </div> </div> <script type="text/javascript"> var _groups;//用戶組列表 $("#userSearch").click(function () { $("#userDataGrid").datagrid('load', { userName: $("#userName").val(), groupId: $("#usergroup").combobox('getValue') }); }); function Group(gid) { var _name; if (_groups == undefined) _groups = $("#usergroup").combobox('getData'); for (i = 0; i < $(_groups).size() ;i++) { if (_groups[i].UserGroupId == gid) { _name = _groups[i].Name; } } return _name; } </script>