【问题标题】:Issue setting checkboxes to disabled将复选框设置为禁用
【发布时间】:2014-10-22 13:41:20
【问题描述】:

我目前正在开发一个项目,其中网站用户的权限及其权限显示在 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 变量总是以列表中的最后一个条目结束,因此始终允许复选框不被禁用。

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-04-17
      • 2013-12-05
      • 1970-01-01
      • 2010-11-15
      • 2020-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多