我目前正在开发一个项目,其中站点用户的权限及其权限显示在 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 变量总是以列表中的最后一个条目结束,因此始终允许不禁用复选框。
我的问题是有没有办法处理这个时间问题并提高效率?