В настоящее время я работаю над проектом, в котором разрешения пользователей сайта и их разрешения отображаются в DevExpress GridView. Разрешения пользователя - это просто флажки. Проблема, с которой я сталкиваюсь, - установить объект для флажка.Флажок установки проблемы отключен
Первоначально сайт использовался только одним сущностью (т.е. офисом). Моя цель - использовать несколько офисов. Для этого я создал раскрывающийся список, чтобы переключаться между офисами, чтобы вы могли устанавливать разрешения пользователя на основе каждого офиса. Однако у каждого офиса нет одинакового списка разрешений.
Ex. Первый офис имеет полный доступ к сайту (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"
};
}
На развитие, флажки отключены. На нашем тестовом сайте это не так. Я посмотрел, есть ли сеанс, который я использовал для этого, или нет, и это так. Я считаю, что это вопрос. Переменная приложения, которую я создал, всегда заканчивается последней записью в списке, поэтому всегда можно отключить этот флажок.
Мой вопрос: есть ли способ справиться с этой проблемой времени и сделать ее более эффективной?