冯 海

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

2018教程之mvc+ef + identity之七:角色权限系统菜单2菜单的全选择和写入

一、在前台实现读出来并能全选。

1.后台httget方法

/// <summary>
		/// 菜单授权
		/// </summary>
		/// <param name="disposing"></param>
		[HttpGet]
		public ActionResult AuthorityMenu(string Id)
		{

			
			///读出所有的现有的菜单名称,以下拉框的形式写入。

			//var menus = db.MenuInfos.Where(m => m.Popedomfatherid == 0).OrderBy(x => x.Sort);

			///下面是开始显示菜单的列表了
			///读出所有的菜单列表
			var data = db.MenuInfos.ToList();
			///定义一个变量result的MenuInfo列表变量
			var result = new List<MenuInfo>();
			///读出所有的一级菜单
			var level0 = data.Where(m => m.Popedomfatherid == 0).ToList();
			///当一级菜单索引选择有的时候,一级菜单就仅为我们选择的这个


			///对所有一级菜单进行一次循环。 foreah (var xx in level0) 这种一样
			level0.ForEach(item =>
			{
				///定义一个children字菜单变量,当他的Popedomfatherid=当前循环的ID,取出当前的所有字菜单
				var children = data.Where(m => m.Popedomfatherid == item.Id).ToList();
				///给子菜单名字前面加上几个---
				children.ForEach(m => m.MenuName = "------------" + m.MenuName);
				///为新定义的result变量增加一个 一级菜单
				result.Add(item);
				///为新定义的result变量增加一个 所有的字菜单
				result.AddRange(children);
			});
			///ViewBag.list传值
			ViewBag.List = result;

			return View();

		}

 前台读出,注意有一个全选的按钮,

所有checkbox使用name=c,value=iD,就是菜单ID

@using MYtest2018.Models
@model MenuInfo
@{
	ViewBag.Title = "AuthorityMenu";
	Layout = "~/Views/Shared/_Layoutadmin.cshtml";
}

<div class="row wrapper border-bottom white-bg page-heading">
	<div class="col-sm-4">
		<h2>角色授权菜单</h2>

	</div>
	<div class="col-sm-8">
		<div class="title-action">

		</div>
	</div>
</div>


<div class="wrapper wrapper-content animated fadeInRight">
@using (Html.BeginForm("AuthorityMenu", "Account", FormMethod.Post))
{
	@Html.AntiForgeryToken()
	@Html.ValidationSummary(true, "", new { @class = "text-danger" })
	<div class="row">
		<div class="col-lg-12">
			<div class="ibox float-e-margins">
				<div class="ibox-title">
					<h3>
						操作:

						<input type="checkbox" value="" id="check-all" /><label for="check-all">全选</label> | <input class="btn btn-primary" type="submit" value="确认授权" />

					</h3>
				</div>
				<div class="ibox-content p-md">
					@{

						var data = ViewBag.List as List<MenuInfo>;
					}
					<div class="table-responsive">
						<table class="table table-hover issue-tracker">

							<tbody>
								@if (data != null && data.Any())
								{
									foreach (var item in data)
									{
										<tr>
											<td>
											
												<input type="checkbox"  name="c" value="@item.Id"/>
											</td>
											<td>
												@item.Id
											</td>
											<td class="issue-info">
												<i class="@item.MenuIcon"></i> @item.MenuName
											</td>
											<td>@item.ControllerName/@item.MethodName</td>
										</tr>
									}
								}
							</tbody>
						</table>
					</div>
				</div>
			</div>
		</div>
	</div>
						}
</div>




@section Scripts {
	@Scripts.Render("~/bundles/jqueryval")

	<script>

		$(function () {
			

			$("#check-all").click(function () {
				var checkedAll = $(this).prop("checked")
				if (checkedAll) {
					$("[name='c']").attr("checked", "checked");
				} else {
					$("[name='c']").removeAttr("checked");
				}

			})
		})
	</script>


}

  

 

二、实现角色ID和菜单ID的批量写入。

1.在角色列表处,加一个授权按钮,用于将ID送入这个POST方法

 

 

2.后 POST方法,注意要先删除该 角色ID包含的原有记录

[HttpPost]
		[ValidateAntiForgeryToken]
		public ActionResult AuthorityMenu(string Id, List<string> c)
		{
			///如Id为null,返回错误请求
			if (Id == null)
			{
				return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
			}
			////删除包含有该角色Id的所有记录
			//删除所有的数据,就是清空表原有数据
			List<RoleMenu> xx = db.RoleMenus.Where(m=>m.RoleId==Id).ToList();
			db.RoleMenus.RemoveRange(xx);
			///将所有List C中的菜单ID与ROLEID一起写入表中
			if (c != null) {
				foreach (var id2 in c) {
					RoleMenu roleMenu = new RoleMenu();
					roleMenu.RoleId = Id;
					roleMenu.MenuId = Convert.ToInt32(id2);
					roleMenu.IsAvailable = 1;
					db.RoleMenus.Add(roleMenu);
				}
				

			}
			db.SaveChanges();
			return View();
		}

  

 

 

 

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