0

我目前正在开发一个项目,其中站点用户的权限及其权限显示在 DevExpress GridView 中。用户的权限只是复选框。我遇到的一个问题是为复选框设置对象。

最初,该站点仅由一个实体(即办公室)使用。我的目标是让多个办公室使用。为此,我创建了一个下拉菜单来在办公室之间切换,以便您可以根据每个办公室设置用户的权限。但是,每个办公室没有相同的权限列表。

前任。第一个办公室可以完全访问该网站(12 个模块)(它是原来的办公室)。第二个办公室只能访问网站上的 5 个模块。我创建了一种方法来解决这个问题,它禁用了除第二个办公室的 5 个模块之外的所有内容。

在开发过程中,我创建来处理这个工作。但是,当转移到我们的测试环境时,它停止了工作。我认为的问题是有两个用于创建复选框字段的 foreach 循环以及网格的列数据。以下是我为使我的解决方案发挥作用所做的工作。

看法

foreach (var item in Model.Applications)
        {
            settings.Columns.AddBand(bnd =>
            {
                bnd.Name = string.Format("{0}", item.Name);
                bnd.Caption = item.Name + " Roles";

                foreach (var subitem in item.Roles)
                {
                    bnd.Columns.Add(col =>
                    {
                        col.Name = string.Format("{0}", subitem.Name);
                        col.FieldName = subitem.Name;
                        col.VisibleIndex = index;
                        col.Width = Unit.Pixel(75);
                        col.ColumnType = MVCxGridViewColumnType.CheckBox;
                        col.Caption = subitem.Description;
                        col.Settings.AllowAutoFilter = DefaultBoolean.False;
                        col.Settings.AllowHeaderFilter = DefaultBoolean.False;
                        col.Settings.AllowSort = DefaultBoolean.False;

                        col.SetDataItemTemplateContent(temp =>
                        {
                        %>
                        <%=Html.CheckBox(
                                string.Format("chk{0}{1}", col.Name, temp.KeyValue.ToString().Replace("-", "")),
                                (bool)DataBinder.Eval(temp.DataItem, col.Name),
                                SCCView.Areas.Admin.Models.ModifyPrivilegeModel.GetHtmlAttributes(bnd.Name, temp.KeyValue, col.Name, item.Name)
                                )%>
                        <%
                        });
                    });
                    index++;
                }
            });
        }

模型

public static object GetHtmlAttributes(string bndName, object keyValue, string colName, string itemName)
        {
            //Check to see if SCNGO is being used
            if (HttpContext.Current.Session["SCNGOAllowedApps"] != null)
            {
                //Check to see if that Application is within SCNGO currently
                var scngoApps = (List<string>)HttpContext.Current.Session["SCNGOAllowedApps"];
                var app = scngoApps.Where(scngo => scngo == itemName).Select(scngo => scngo).FirstOrDefault();

                //App is not, so disable it
                if (app == null)
                    return new
                    {
                        onClick = string.Format(@"CheckChanged(this, '{0}', '{1}', '{2}');",
                                       bndName,
                                       keyValue,
                                       colName),
                        Class = "ModifyPrivChkBox",
                        disabled = "disabled"
                    };
            }

            //SCC, or at the very least an app within SCNGO
            return new
            {
                onClick = string.Format(@"CheckChanged(this, '{0}', '{1}', '{2}');",
                                        bndName,
                                        keyValue,
                                        colName),
                Class = "ModifyPrivChkBox"
            };
        }

在开发中,复选框被禁用。在我们的测试站点上,它们不是。我已经查看了我用来执行此操作的 Session 是否存在,并且确实存在。问题是我相信的时机。我创建的 app 变量总是以列表中的最后一个条目结束,因此始终允许不禁用复选框。

我的问题是有没有办法处理这个时间问题并提高效率?

4

1 回答 1

0

我终于弄清楚了这个问题。问题是 itemName。无论它在循环中的哪个位置,它都会不断地以相同的值返回。一旦我将其更改为 colName,它就突然开始工作了。

于 2014-10-23T15:16:03.917 回答