我目前正在开发一个项目,在该项目中,网站用户的权限及其权限将在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变量总是以列表中的最后一个条目结束,因此始终不允许禁用该复选框。
我的问题是,有没有办法处理这个时间问题并使其更有效率?
答案 0 :(得分:0)
我终于想出了这个问题。问题是itemName。无论循环中的位置如何,它都会不断返回相同的值。一旦我将其更改为colName,它就会突然开始工作。