在asp.net mvc

时间:2019-02-28 08:56:44

标签: c# asp.net-mvc user-interface asp.net-mvc-5 usergroups

我正在ASP.NET MVC中开发CRUD应用程序,我已经实现了可与AD一起使用的安全性部分,现在我想简化向用户分配varius权限的过程。所有组和用户都存储在数据库中,它们受此关系约束: enter image description here

在我当前的视图下,这是行不通的,它只是图形。

enter image description here

这是我的查看代码:

<body>
<div class="container">
    <br />
    <table class="table table-responsive table-bordered">
        @{
            //inizialize my ef context
            dev_labelsEntities db = new dev_labelsEntities();
            //get all users stored in the db
            var users = from u in db.Users
                        orderby u.username
                        select new
                        {
                            u.username
                        };
            //get all groups from the db
            var groups = from g in db.Groups
                         orderby g.group_name
                         select new
                         {
                             g.group_name
                         };
            <tr>
                <th>Username</th>
                @foreach (var item in groups)
                {
                    <td>@Html.DisplayFor(model => item.group_name)</td>
                }
            </tr>
            foreach (var item in users)
            {

                int count = 1;
                <tr>
                    <td>@Html.DisplayFor(model => item.username)</td>
                    @foreach (var itemG in groups)
                    {
                      //for distinguish the varius checkbox i use the name
                      //of the group and a generic count which indicates
                      //the row number                           
                      <td>@Html.CheckBox(""+itemG.group_name+"_"+count)</td>
                    }
                </tr>
                count++;
            }
        }            
     </table>
   </div>
 </body>
我期望的最终结果是:当用户选中一个复选框时,请在UserGrops表中调用插入操作,以便一个用户可以拥有一个以上的组(仅当该用户属于Admins组时,所有其他复选框都必须被禁用),而当用户取消选中该复选框后,该表具有特定权限的用户(例如,用户Jonh属于pc和打印机组,我取消选中对应于打印机组的复选框,则该条目将从表,因此Jonh只能访问pc部分。

如果有人对实现它有任何建议或技巧,我将不胜感激。

狮子座

编辑

我已将此脚本添加为@Amine建议:

$(document).ready(function () {
    $('.chkclass').click(function () {
        var getchkid = $(this).attr('id');
        var isChecked = $('#' + getchkid).is(':checked');
        if ($('#' + getchkid).is(':checked') == true) {

            // the value that i need
            var username = $(this).attr('username');
            var groupname = $(this).attr('groupname');

            //ajax for calling my action medthod
            $.ajax({
                type: 'Post',
                url: '/UserGroups/ManagePermission',
                cache: false,
                dataType: 'Json',
                data: { usr: username, grp: groupname },
                //success: function (data) {

                //},
                //error: function (xhr, ajaxOptions, thrownError) {
                //    alert(thrownError);
                //}
            })
        }
    });
});

该方法接收到正确的值,但在简单测试后会发生

之前:

enter image description here

之后:

enter image description here

为什么会这样?

1 个答案:

答案 0 :(得分:1)

在HTML中使用

<input type="checkbox"   class="chkclass"  username="@item.username"  groupname="@itemG.group_name" id="@count"  />

代替

<td>@Html.CheckBox(""+itemG.group_name+"_"+count)</td>
  • 用户名和组名将是传递给操作的数据
  • 所有复选框将具有用于jquery操作的相同类
  • id将使用该计数在复选框上找到

您可以使用类似脚本的脚本

$(document).ready(function () {   


    $('.chkclass').click(function () {   

        var getchkid = $(this).attr('id');   
        var isChecked = $('#' + getchkid).is(':checked');   
  if ($('#' + getchkid).is(':checked') == true) {

  // to be send to your call
    var username = $(this).attr('username');
    var groupname = $(this).attr('groupname');

  //here put your call ajax to your action
  $.ajax({
            type: "POST",
            url: //your URL
            data: '{}', // your Data
  ....
   }   
    });   

});