冯 海

一个程序新人菜鸟的日记,希望大家多多关照。QQ:32316131

2018教程之mvc+ef之五:Identity角色管理之为用户列表中显示当前用户所属的角色名称

最先已实现了用户列表的显示,关联了部门名称的显示。

现在我如何再上面显示他所属的角色名称哩?

 一、重新建个ViewUserList2的显示模型,建在viewmodelS下

增加角色名的字段好做join

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web;

namespace MYtest2018.ViewModels
{
	public class ViewUserList
	{


		public string Id { get; set; }
		[Required]
		[Display(Name = "真实姓名")]
		public string RealName { get; set; }

		[Display(Name = "登录名")]
		public string UserName { get; set; }

		[Display(Name = "电话")]
		[Required]
		public virtual string PhoneNumber { get; set; }

		[Display(Name = "部门名称")]
		[Required]
		public string DepartmentName { get; set; }
		public string RoleNmae { get; set; }

		[Display(Name = "头像")]
		public string HeaderPic { get; set; }
		public string DepartmentId { get; set; }

		public string QQ { get; set; }
		public string WX { get; set; }
		public string Address { get; set; }
		public int Gender { get; set; }
		[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd}", ApplyFormatInEditMode = true)]
		public DateTime BirthDate { get; set; }
		[DisplayFormat(DataFormatString = "{0:yyyy-MM-dd HH:mm}", ApplyFormatInEditMode = true)]
		public DateTime CreateTime { get; set; }
		[Required]
		[EmailAddress]
		public string Email { get; set; }


	}
}

 

 二,修改后台LIST方法
[AllowAnonymous]
		[HttpGet]
		public ActionResult ListUsers(string SeachColumnString, string SearchString, int? page)
		{
			///读出所有的部门
			ViewBag.drolistmenu = db.Departments.OrderBy(x => x.Sort);
			///当搜索和部门变量都 不 为空的时间,给page弄一个1值
			if (!string.IsNullOrEmpty(SeachColumnString) || !string.IsNullOrEmpty(SearchString))    //当二个变量都不为空时,page=1
			{
				page = 1;
			}

			///分而要求的二个变量送前台
			ViewBag.SeachColumnString = SeachColumnString;    //将二个搜索变量存为viewbag送到前台
			ViewBag.SearchString = SearchString;


			///将所有用户角色表读出来
			var rolses = RoleManager.Roles.ToList();
			///将用户列表读出来,不过按部门ID排序
			var users1 = (UserManager.Users.OrderBy(m => m.DepartmentId)).ToList();
			////将部门表和用户列表组成一张表,主要将部门名称替换部门ID
			var users = from m in users1
						join mr in db.Departments.ToList() on m.DepartmentId equals mr.Id
						select new ViewUserList2
						{
							Id = m.Id,
							UserName = m.UserName,
							RealName = m.RealName,
							DepartmentName = mr.DepartmentName,
							PhoneNumber = m.PhoneNumber,
							HeaderPic = m.HeaderPic,
							DepartmentId = m.DepartmentId,
							QQ = m.QQ,
							WX = m.WX,
							Address = m.Address,
							Gender = m.Gender ?? 0,
							BirthDate = m.BirthDate ?? DateTime.Now,
							CreateTime = m.CreateTime ?? DateTime.Now,
							Email = m.Email,
							RoleNmae = string.Join(",", rolses.Where(p => m.Roles.Select(n => n.RoleId).Contains(p.Id)).Select(n => n.Name).ToArray())
						};

			///关联
			///
			//var xxx= from m in 


			///当有索搜真实名称的时候
			if (!string.IsNullOrEmpty(SearchString))
			{
				users = users.Where(x => x.RealName.Contains(SearchString));
			}
			///当部门索引选择有的时候
			if (!string.IsNullOrEmpty(SeachColumnString))
			{
				users = users.Where(x => x.DepartmentId == SeachColumnString);
			}

			int pageNumber = page ?? 1;     //定义第几页
			int pageSize = 6;    //每页显几条
								 //通过ToPagedList扩展方法进行分页
			return View(users.ToPagedList(pageNumber, pageSize));   //用topagelist显示


		}

 将这个用户的角色列表写在rolename

	RoleNmae = string.Join(",", rolses.Where(p => m.Roles.Select(n => n.RoleId).Contains(p.Id)).Select(n => n.Name).ToArray())

  

 

 首先,m就是用户列表中的一个用户,m.roles就这这个用户的所有角色,
m.Roles.Select(n => n.RoleId).

   就是这个用户的角色的Id列表,roles.where,就是查询 用户角色列表里有的Id,查出来又是一个列表 Select(n=>n.Name) 就是取 角色名称列表, String.join 就是把这个列表用逗号隔开拼成字符串 

m.Roles 就已经用到了userrole,你看到Roles 只有UserId和RoleId属性

三、前台
<div>  <strong class="text-navy">     @Html.DisplayFor(m => user.RoleNmae)    </strong>              </div>

 

四,效果 

 

 

 

 

posted @ 2018-08-31 01:39  秋天来了哟  阅读(245)  评论(0)    收藏  举报
认识就是缘份,愿天下人都快乐!
QQ: 32316131
Email: 32316131@qq.com