为用户添加角色

subForm()定义此方法在主窗体调用
<input type="hidden" name="userId" value="@userInfo.ID" /> 定义隐藏域保存ID
@{
    Layout = null;
}
@using CZBK.ItcastOA.Model
<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>为用户分配角色</title>
    <script src="~/Scripts/jquery-1.7.1.min.js"></script>
    <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
    <script type="text/javascript">
        function subForm() {
            $("#form1").submit();
        }
        function afterSet(data) {
            window.parent.setUserRoleAfter(data);
        }
    </script>
</head>
<body>
    <div>
    为用户 @{
        UserInfo userInfo = ViewBag.UserInfo;
        @userInfo.UName
    } 分配角色   
        @using (Ajax.BeginForm("SetUserRole", "UserInfo", new { }, new AjaxOptions() { HttpMethod = "post", OnSuccess = "afterSet" }, new { id = "form1" }))
        {
            <input type="hidden" name="userId" value="@userInfo.ID" />
            List<RoleInfo>roleInfoList=ViewBag.AllRoleInfo;
            List<int> roleInfoIdList = ViewBag.AllExtRoleId;
            foreach (RoleInfo roleInfo in roleInfoList)
            {
                var checkName="cba_"+roleInfo.ID;
                if (roleInfoIdList.Contains(roleInfo.ID))
                {
                    <input type="checkbox" name="@checkName" value="@roleInfo.ID" checked="checked" />@roleInfo.RoleName
                }
                else
                {
                      <input type="checkbox" name="@checkName" value="@roleInfo.ID" />@roleInfo.RoleName
                }
            }
        }
    </div>
</body>
</html>

主窗体调子窗体方法

handler: function () {
// $("#addForm").submit();//提交表单
var childWindow = $("#setRoleFrame")[0].contentWindow;
childWindow.subForm();
}

       #region 为用户分配角色
        public ActionResult SetUserRoleInfo()
        {
            int userId = int.Parse(Request["userId"]);
           UserInfo userInfo=UserInfoService.LoadEntities(u=>u.ID==userId).FirstOrDefault();
           ViewBag.UserInfo = userInfo;
            //查询所有的角色信息
           short delFlag = (short)DelFlagEnum.Normarl;
           var roleInfoList = RoleInfoService.LoadEntities(r=>r.DelFlag==delFlag).ToList();
            //找出用户已经有的角色的编号
           var userRoleIdList = (from r in userInfo.RoleInfo
                                 select r.ID).ToList();
           ViewBag.AllRoleInfo = roleInfoList;
           ViewBag.AllExtRoleId = userRoleIdList;
           return View();
        }
        /// <summary>
        /// 完成对用户角色的分配
        /// </summary>
        /// <returns></returns>
        public ActionResult SetUserRole()
        {
            int userId = int.Parse(Request["userId"]);
            string[]Allkeys=Request.Form.AllKeys;//获取表单中所有的表单元素的name属性的值。
            List<int> list = new List<int>();
            foreach (string key in Allkeys)
            {
                if (key.StartsWith("cba_"))
                {
                   string k= key.Replace("cba_","");
                   list.Add(int.Parse(k));
                }
            }
            if (UserInfoService.SetUserOrderInfo(userId, list))
            {
                return Content("ok");
            }
            else
            {
                return Content("no");
            }
        }

先删除已经存在的,在增加新选择的角色。

   public bool SetUserOrderInfo(int userId, List<int> roleIdList)
        {
            var userInfo = this.GetCurrentDbSession.UserInfoDal.LoadEntities(u => u.ID == userId).FirstOrDefault();//获取用户
            if (userInfo != null)
            {
                //删除用户已有的角色.
                userInfo.RoleInfo.Clear();
                foreach (int roleId in roleIdList)
                {
                  var roleInfo=  this.GetCurrentDbSession.RoleInfoDal.LoadEntities(r => r.ID == roleId).FirstOrDefault();
                  userInfo.RoleInfo.Add(roleInfo);//给用户分配角色,通过导航属性给中间表插入数据
                }
               return this.GetCurrentDbSession.SaveChanges();
            }
            else
            {
                return false;
            }
        }

//为用户分配完角色以后调用该方法。
function setUserRoleAfter(data) {
if (data == "ok") {
$('#setRoleDiv').dialog('close');
} else {

}
}

原文地址:https://www.cnblogs.com/ecollab/p/6170268.html