问题设置复选框已禁用

时间:2014-10-22 13:41:20

标签: asp.net-mvc-3 devexpress-mvc

我目前正在开发一个项目,在该项目中,网站用户的权限及其权限将在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"
            };
        }

在开发时,复选框已禁用。在我们的测试网站上,他们不是。我已经查看过我以前做过的会话是否存在而且确实如此。问题是我相信的时机。我创建的app变量总是以列表中的最后一个条目结束,因此始终不允许禁用该复选框。

我的问题是,有没有办法处理这个时间问题并使其更有效率?

1 个答案:

答案 0 :(得分:0)

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