群组管理,主要是针对不同人建立不同的群组,这里主要是群组本身管理,至于群组与用户之间的关系,我感觉还是用领一张表建立关系比较好,毕竟他们是多对多的关系。先看代码:
一、模板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<int> 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<int> 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<System.DateTime> CreatedDate { get; set; }
/// <summary>
/// 状态
/// </summary>
public Nullable<int> Flag { get; set; }
}
} 由于在List显示页面里,有些数据需要读取字典显示,数据库只保存了对应的Value值,所以如 UnitName和GroupTypeName属性,通过get检索器,读取出来。不过这里是系统设置的好,没有从数据库中读取,如果是的话,每条数据都要查询数据库,是不是影响效率呢?还是在代码中建立枚举或者数组好些呢,或者利用视图查询,再者也可以将Value与Text一起保存到数据表中。
二、控制器Contrallers
本层涉及到一些业务逻辑,和用户管理一样,在BLL中建立SysComGroupRepository类,继承自IRepositoryBase<Group>。在这里定义一些数据操作方法。首先定义一个数据库连接类
private HillstoneContext db = new HillstoneContext();
定义AUCD方法
/// <summary>
/// 添加一个群组
/// </summary>
/// <param name="Tmodel">要添加的群组信息实例</param>
/// <returns>TrueOrFalse</returns>
public override bool Add(Group Tmodel)
{
if (Tmodel == null) { return false; }
db.group.Add(Tmodel);
if (db.SaveChanges() > 0)
{
return true;
}
else {
return false;
}
}
/// <summary>
/// 修改群组信息
/// </summary>
/// <param name="Tmodel">要修改的群组信息实例</param>
/// <returns></returns>
public override bool Update(Group Tmodel)
{
if(Tmodel==null){return false;}
db.group.Attach(Tmodel);
db.Entry<Group>(Tmodel).State = EntityState.Modified;//using System.Data
if (db.SaveChanges() > 0) { return true; } else { return false; }
}
/// <summary>
/// 删除一条群组信息
/// </summary>
/// <param name="Id">GroupId</param>
/// <returns>TrueOrFalse</returns>
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; }
}
/// <summary>
/// 查找指定的群组
/// </summary>
/// <param name="Id">GroupID</param>
/// <returns>返回查到的群组实例</returns>
public override Group Find(int Id)
{
return db.group.SingleOrDefault(g => g.GroupId == Id);
}
/// <summary>
/// 群组列表
/// </summary>
/// <returns>群组列表</returns>
public IQueryable<Group> List() {
var _group = db.group;
return _group;
}
/// <summary>
/// 根据群组类型查询
/// </summary>
/// <param name="groupType">群组类型ID</param>
/// <returns>群组列表</returns>
public IQueryable<Group> 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为全部。
/// <summary>
/// 群组列表页面
/// </summary>
/// <param name="groupType">用户类型:0集团1分公司2部门3其他4自定义</param>
/// <returns></returns>
public ActionResult GroupList(int Id = -1)
{
//查询条件:群组类型下拉框
var _groupTypeList = GroupTypeList(Id);
_groupTypeList.Insert(0, new SelectListItem() { Value = "-1", Text = "全部" });
ViewData.Add("GroupTypeList", _groupTypeList);
IQueryable<Group> iGroup;
if (Id == -1)
{
iGroup = groupRsy.List();
}
else
{
iGroup = groupRsy.List(Id);
}
return View(iGroup);
} 2)添加群组操作,赋值ViewData,对有关下拉框数据进行绑定,添加人、添加时间、状态等默认后台赋值。
/// <summary>
/// 添加群组显示页面
/// </summary>
/// <returns></returns>
[UserAuthorize]
public ActionResult Create()
{
ViewData["UnitId"] = Common.Function.getUnitList(-1);
ViewData["GroupType"] = GroupTypeList();
return View();
}
/// <summary>
/// 提交添加群组信息
/// </summary>
/// <param name="group"></param>
/// <returns></returns>
[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技术直接调用本方法,注意这里返回是布尔值,而不是视图路径。
/// <summary>
/// 删除群组
/// </summary>
/// <param name="Id"></param>
/// <returns></returns>
[HttpPost]
public bool Delete(int Id = -1) {
var _group = groupRsy.Find(Id);
if (_group != null)
{
groupRsy.Delete(Id);
return true;
}
else
{
return false;
}
}4)查看操作
/// <summary>
/// 查看群组页面
/// </summary>
/// <param name="Id">群组ID</param>
/// <returns></returns>
public ActionResult Details(int Id)
{
var _group = groupRsy.Find(Id);
return View(_group);
} 三、视图View代码,暂时就有三个:一个列表页GroupList.cshtml、添加页面:Create.cshtml、默认显示页:Details.cshtml
1)列表页面,查询条件:群组类型下拉框显示,因为在控制器中ViewData已经绑定了此数据,这里调用即可。当选择变化时调用Change方法,传ID参数给后台读取。
<th colspan="7">@Html.DropDownList("GroupTypeList")</th>
$("#GroupTypeList").change(function(){
location.href="/Group/GroupList/"+$(this).children("option:selected").val();
}) 虽然数据库中对于组织机构,群组类型都是Value值,不过我们在模型中已经做了处理,详情看上面代码。所以这里直接可以调用:
@Html.DisplayNameFor(model => model.UnitName) @Html.DisplayNameFor(model => model.GroupTypeName)
删掉不需要显示的内容。
对数据进行删除操作,我们通过js操作后台,并对返回结果进行判断。
<a href="javascript:void(0)" onclick="Delete(@item.GroupId,‘@item.GroupName‘)">删除</a>
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)
本文出自 “奔跑的小蜗牛-原创空间” 博客,请务必保留此出处http://songjiahao.blog.51cto.com/4433831/1586001
七、Asp.Net MVC4.0开发CMS系统案例之用户群组模块
原文:http://songjiahao.blog.51cto.com/4433831/1586001