群组管理,主要是针对不同人建立不同的群组,这里主要是群组本身管理,至于群组与用户之间的关系,我感觉还是用领一张表建立关系比较好,毕竟他们是多对多的关系。先看代码:

    一、模板Models

    

using System;using System.ComponentModel.DataAnnotations;using System.ComponentModel.DataAnnotations.Schema;namespace Hillstone.Models{    public class Group    {        [Key]        public int GroupId { get; set; }        [Display(Name = "组织机构")]        public Nullable
 UnitId { get; set; }        [Display(Name = "组织机构")]        public string UnitName { get { return Common.Function.getUnitName(this.UnitId); } }                       [Display(Name="群组名称")]        [Required(ErrorMessage="×")]        [StringLength(50,ErrorMessage="×")]        public string GroupName { get; set; }        [Display(Name="群组类型")]        public int GroupType { get; set; }        [Display(Name = "群组类型")]        public string GroupTypeName { get { return Common.Function.getGroupTypeName(this.GroupType); } }        [Display(Name="排序")]        [MaxLength(10,ErrorMessage="×")]        public string OrderNo { get; set; }        [Display(Name="描述")]        public string Description { get; set; }        [Display(Name = "创建人ID")]        public Nullable
 CreatedUserId { get; set; }        [Display(Name = "创建人")]        [Required(ErrorMessage="×")]        [StringLength(50,ErrorMessage="×")]        public string CreatedUserName { get; set; }        [Display(Name="创建日期")]        [Required(ErrorMessage="×")]        [DataType(DataType.DateTime,ErrorMessage="×")]        public Nullable
 CreatedDate { get; set; }        /// 
        /// 状态        ///         public Nullable
 Flag { get; set; }    }}

    由于在List显示页面里,有些数据需要读取字典显示,数据库只保存了对应的Value值,所以如 UnitName和GroupTypeName属性,通过get检索器,读取出来。不过这里是系统设置的好,没有从数据库中读取,如果是的话,每条数据都要查询数据库,是不是影响效率呢?还是在代码中建立枚举或者数组好些呢,或者利用视图查询,再者也可以将Value与Text一起保存到数据表中。

    二、控制器Contrallers

    本层涉及到一些业务逻辑,和用户管理一样,在BLL中建立SysComGroupRepository类,继承自IRepositoryBase<Group>。在这里定义一些数据操作方法。首先定义一个数据库连接类

private HillstoneContext db = new HillstoneContext();

定义AUCD方法

        ///         /// 添加一个群组        ///         /// 
要添加的群组信息实例        /// 
TrueOrFalse
        public override bool Add(Group Tmodel)        {            if (Tmodel == null) { return false; }            db.group.Add(Tmodel);            if (db.SaveChanges() > 0)            {                return true;            }            else {                return false;                        }        }        /// 
        /// 修改群组信息        ///         /// 
要修改的群组信息实例        /// 
        public override bool Update(Group Tmodel)        {            if(Tmodel==null){return false;}            db.group.Attach(Tmodel);            db.Entry
(Tmodel).State = EntityState.Modified;//using System.Data            if (db.SaveChanges() > 0) { return true; } else { return false; }        }        /// 
        /// 删除一条群组信息        ///         /// 
GroupId        /// 
TrueOrFalse
        public override bool Delete(int Id)        {            db.group.Remove(db.group.SingleOrDefault(g => g.GroupId == Id));            if (db.SaveChanges() > 0) { return true; } else { return false; }        }        /// 
        /// 查找指定的群组        ///         /// 
GroupID        /// 
返回查到的群组实例
        public override Group Find(int Id)        {            return db.group.SingleOrDefault(g => g.GroupId == Id);        }        /// 
        /// 群组列表        ///         /// 
群组列表
        public IQueryable
 List() {            var _group = db.group;            return _group;                }        /// 
        /// 根据群组类型查询        ///         /// 
群组类型ID        /// 
群组列表
        public IQueryable
 List(int groupType) {            return db.group.Where(g => g.GroupType == groupType);               }

查询返回数组列用:IQueryable类型。

    控制器GroupContrallers中引用业务逻辑类、公用类、模板类。

using Hillstone.Models;using Hillstone.BLL;using Hillstone.Common;

实例化两个业务逻辑类

        private SysComGroupRepository groupRsy = new SysComGroupRepository();        private SysComUserRepository userRsy = new SysComUserRepository();

    1)显示List列表页面中,可以根据类别进行查询,绑定查询条件。ViewData中添加,一遍View视图使用。查询条件get方式传递参数ID,进行搜索,-1为全部。

        ///         /// 群组列表页面        ///         /// 
用户类型:0集团1分公司2部门3其他4自定义        /// 
        public ActionResult List(int Id = -1)        {            //查询条件:群组类型下拉框            var _groupTypeList = GroupTypeList(Id);            _groupTypeList.Insert(0, new SelectListItem() { Value = "-1", Text = "全部" });            ViewData.Add("GroupTypeList", _groupTypeList);            IQueryable
 iGroup;            if (Id == -1)            {                 iGroup = groupRsy.List();            }            else            {                iGroup = groupRsy.List(Id);            }            return View(iGroup);        }

    2)添加群组操作,赋值ViewData,对有关下拉框数据进行绑定,添加人、添加时间、状态等默认后台赋值。

        ///         /// 添加群组显示页面        ///         /// 
        [UserAuthorize]        public ActionResult Create()        {            ViewData["UnitId"] = Common.Function.getUnitList(-1);            ViewData["GroupType"] = GroupTypeList();            return View();        }        ///         /// 提交添加群组信息        ///         /// 
        /// 
        [UserAuthorize]        [HttpPost]        public ActionResult Create(Group group)        {            ViewData["UnitId"] = Common.Function.getUnitList(group.UnitId);            ViewData["GroupType"] = GroupTypeList();            HttpCookie _cookie = HttpContext.Request.Cookies["user"];            User _user = userRsy.Find(_cookie["loginname"].ToString());            group.CreatedUserId = _user.UnitId;            group.CreatedUserName = _user.UserName;            group.CreatedDate = DateTime.Now;            group.Flag = 1;            if (groupRsy.Add(group))            {                ModelState.AddModelError("Message", "成功!");            }            else            {                ModelState.AddModelError("Message", "失败");            }            return View();        }

    3)删除一条群组信息,View页面用JQuery技术直接调用本方法,注意这里返回是布尔值,而不是视图路径。JsonResult可以实现无刷新删除操作,不使用的话,就能删除但是会提交更新页面。

        ///         /// 删除群组        ///         /// 
        /// 
        [HttpPost]        public bool JsonResult(int Id = -1) {            var _group = groupRsy.Find(Id);            if (_group != null)            {                groupRsy.Delete(Id);                return Json(true);            }            else            {                return Json(false);            }        }

    4)查看操作  

        ///         /// 查看群组页面        ///         /// 
群组ID        /// 
        public ActionResult Details(int Id)        {            var _group = groupRsy.Find(Id);            return View(_group);        }

    5)修改操作

      ///         /// 修改页面        ///         /// 
群组ID        /// 
        public ActionResult Edit(int Id)        {                  var _group = groupRsy.Find(Id);            ViewData["UnitId"] = Common.Function.getUnitList(_group.UnitId);            ViewData["GroupType"] = GroupTypeList(_group.GroupType);            return View(_group);        }        /// 
        /// 提交修改页面        ///         /// 
群组数据        /// 
        [AdminAuthorize]        [HttpPost]        public ActionResult Edit(SysComGroup group)        {            ViewData["UnitId"] = Common.Function.getUnitList(group.UnitId);            ViewData["GroupType"] = GroupTypeList(group.GroupType);            if (ModelState.IsValid)            {                //db.Configuration.ValidateOnSaveEnabled = false;                if (groupRsy.Update(group))                {                    ModelState.AddModelError("Message", "修改完毕!");                }                else                {                    ModelState.AddModelError("Message", "修改失败!");                }                //db.Configuration.ValidateOnSaveEnabled = true;            }                    return View();        }

     三、视图View代码,暂时就有三个:一个列表页List.cshtml、添加页面:Create.cshtml、默认显示页:Details.cshtml

    1)列表页面,查询条件:群组类型下拉框显示,因为在控制器中ViewData已经绑定了此数据,这里调用即可。当选择变化时调用Change方法,传ID参数给后台读取。

  
@Html.DropDownList("GroupTypeList")        $("#GroupTypeList").change(function(){        location.href="/Group/List/"+$(this).children("option:selected").val();    })

    虽然数据库中对于组织机构,群组类型都是Value值,不过我们在模型中已经做了处理,详情看上面代码。所以这里直接可以调用:

    @Html.DisplayNameFor(model => model.UnitName)    @Html.DisplayNameFor(model => model.GroupTypeName)

    删掉不需要显示的内容。

    对数据进行删除操作,我们通过js操作后台,并对返回结果进行判断。

 
删除      function Delete(id, name)    {        if (confirm("你确认要删除" + name + "?")) {            $.post("@Url.Content("~/Group/Delete")", { Id: id }, function (data) {                if(data){                    alert("删除成功!");                    location.reload();                }            })        }    }

    2)添加页面,再看一次下拉框的方式。

@Html.DropDownListFor(model => model.UnitId,ViewData["UnitId"] as SelectList)@Html.DropDownListFor(model => model.GroupType,ViewData["GroupType"] as SelectList)

    3)修改页面调整一下显示内容即可。其他都差不多。