bootstrapadminlte教程3:实现菜单权限管理菜单树2(对⾓⾊赋菜单权限)新-。。。
上⼀章我使⽤了AJAX对⾓⾊进⾏赋值,确实成功了,但出了⼀个⼤问题,便宜是ajax不能跳转,我赋完值,那个checkbox选择画⾯⼀不变,这不是我要的效果呀,
我要赋完值后进⾏跳到⾓⾊列表。
下⾯进⾏更改。
1.
@model IEnumerable<jsdhh2.Models.Menu>
@{
ViewBag.Title = "⾓⾊关联⽤户"; Layout = "~/Views/Shared/_AdminLayout.cshtml";
}
<!-- Content Header (Page header) -->
<section class="content-header">
<h1></h1>
<h1>
@lename
<small>分配权限菜单</small>
</h1>
<ol class="breadcrumb">
<li><a href="#"><i class="fa fa-dashboard"></i> Level</a></li>
<li class="active">Here</li>
</ol>
</section>
<!--end Content Header (Page header) -->
<!-- Main content -->
<section class="content">
@using (Html.BeginForm("Permissions1","Menus", new { id = lename }, FormMethod.Post))  ///这⾥⼀定要注意,我当时把new{}放在了最后,⽼是传的null,这个写法才能真实传值,到现在也没明⽩,{
<a class="btn btn-primary" href="/Role/List">返回</a>
@*<button id="btn11" class="btn btn-info">授权</button>*@
@*@Html.ActionLink("授权", "Permissions1", new { roleName = lename}, new { @class = "btn btn-primary" })*@
<input type ="submit" class="btn btn-warning"  value="授权" />        ///⽤input type=submit 进⾏提交。
<h1></h1>
<div class="col-xs-12">
<div class="box">
<div class="box-header">
<h3 class="box-title">所有菜单请选择打上勾</h3>
</div>
<!-- /.box-header -->
<div class="box-body table-responsive no-padding">
<table class="table table-hover">
<tbody>
<tr>
<th><input id="selectAll" name="selectAll" type="checkbox" value="true" onclick="changeState(this.checked)" /><input name="selectAll" type="hidden" value="false" />选择</th>
<th>
@Html.DisplayNameFor(model => model.Id)
</th>
<th>
@Html.DisplayNameFor(model => model.ParentId)
</th>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Url)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@*<input type="checkbox" value="@item.Id" class="chk" />*@
@*<input  name="ids111" type="checkbox" id="@item.Id" value="@item.Id" />*@
@Html.CheckBox(item.Id,false)  //播⼊⼀个checkbox列表
</td>
<td>
@Html.DisplayFor(modelItem => item.Id)
</td>
<td>
@Html.DisplayFor(modelItem => item.ParentId)
</td>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
bootstrap 5@Html.DisplayFor(modelItem => item.Url)
</td>
<td></td>
</tr>
}
</tbody>
</table>
</div><!-- /.box-body -->
</div><!-- /.box -->
</div>
<!-- Main content -->
}
</section>
@section Scripts {
@*<script type="text/javascript">    ///这个JS是ajax提前的,我注释掉了
$(function () {
$('#btn11').click(function () {
//取值
let arr = [];
$('.chk:checked').each((i, e) => {
arr.push(e.value);
});
console.log(arr);
/
/提交
$.post("/Menus/Permissions1", { ids: arr, rolename:'@lename'}, (res) => {
console.log(res);
});
})
})
</script>*@
<script type="text/javascript">
function changeState(isChecked) {
var chk_list = ElementsByTagName("input");
for (var i = 0; i < chk_list.length; i++) {
if (chk_list[i].type == "checkbox") {
chk_list[i].checked = isChecked;
}
}
}
</script>
}
  2. 控制器的写法
[HttpPost]            ///注意post⽅法
public ActionResult Permissions1(string id,FormCollection form )    //定义⼆个变量,其实id应该为rolename,但我测试路由的时候没改,他就代表rolename  {
var menuroles = db.MenuRoles.Where(c => c.RoleName == id);
db.MenuRoles.RemoveRange(menuroles);          //删除当rolename值为传进来的ID值时
var winnars = from x in form.AllKeys          //定义所有的form值。
where form[x] != "false"
select x;
foreach (var id2 in winnars)            //foreach所有的form值。
{
if (id2 != "selectAll")  //全选的那个不算数。那个checkbox值要去掉
{
var addroleMenusViewModel = new MenuRole();        //建模
addroleMenusViewModel.RoleName = id;      //模型的⾓⾊名=传进来的ID值
addroleMenusViewModel.MenuId = id2;        //模型的MenuId值等于提交的Value值
db.MenuRoles.Add(addroleMenusViewModel);    //新建Add命令    }
}
db.SaveChanges();          //保存数据操作
return RedirectToAction("List", "Role");  //跳转
}
3.
菜单效果下⾯再讲

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。