Я создаю пользовательский веб-элемент управления в С#. Он предназначен для взаимодействия с иерархией разрешений. У нас есть разные «сайты», и на каждом сайте есть много «приложений», и у каждого приложения есть много «разрешений».
Итак, у нас есть TabPanel, который загружает вкладку для каждого сайта. Затем на каждой вкладке у нас есть TreeView, где родительские узлы — это приложения, а внутренние узлы — разрешения.
Разрешения показывают флажки на основе некоторых критериев и проверяются в зависимости от того, возвращает ли функция HasPermission значение true.
Весь этот код работает... но только для первого выбранного пользователя. Для любого последующего выбранного пользователя шаг в отладчике показывает всю правильность выполняемой логики, но на странице отображается та же информация, что и у первого выбранного пользователя.
Так что в основном он где-то сохраняет дисплей ... и я не могу понять, где.
public partial class Permissions : System.Web.UI.UserControl
{
string _NTLogin;
CoreUser _User;
bool _IsAdmin;
public string NTLogin
{
get
{
return _NTLogin;
}
set
{
ViewState["NTLogin"] = value;
_NTLogin = value;
}
}
public bool IsAdmin
{
get
{
return _IsAdmin;
}
set
{
ViewState["IsAdmin"] = value;
_IsAdmin = value;
}
}
protected void Page_Load(object sender, EventArgs e)
{
}
public void LoadTabs()
{
string [] sites = MISCore.BusinessLayer.CorePermission.GetSites();
foreach (string site in sites)
{
TabPanel tp = new TabPanel();
tp.HeaderText = site;
TabContainer1.Tabs.Add(tp);
}
}
public void LoadTrees()
{
if(_User == null)
return;
TabPanelCollection tabs = TabContainer1.Tabs;
foreach (TabPanel tab in tabs)
{
string site = tab.HeaderText;
string[] apps = MISCore.BusinessLayer.CorePermission.GetApplications(site);
TreeView tv1 = new TreeView();
tv1.EnableViewState = false;
foreach (string app in apps)
{
TreeNode tn1 = new TreeNode(app);
tn1.SelectAction = TreeNodeSelectAction.None;
string[] perms = MISCore.BusinessLayer.CorePermission.GetPermissions(site, app);
foreach (string perm in perms)
{
TreeNode tcn1 = new TreeNode(perm);
tcn1.SelectAction = TreeNodeSelectAction.None;
if (IsAdmin || _User.Manager.HasPermission(site, app, perm))
{
tcn1.ShowCheckBox = true;
if (_User.HasPermission(site, app, perm))
{
tcn1.Checked = true;
}
else
{
tcn1.Checked = false;
}
}
else
{
tcn1.ShowCheckBox = false;
}
tn1.ChildNodes.Add(tcn1);
}
tv1.Nodes.Add(tn1);
}
tab.Controls.Add(tv1);
}
}
protected override void LoadViewState(object savedState)
{
base.LoadViewState(savedState);
_NTLogin = (string)ViewState["NTLogin"];
_IsAdmin = (bool)ViewState["IsAdmin"];
if(_NTLogin != null)
_User = new CoreUser(_NTLogin);
TabContainer1.Tabs.Clear();
LoadTabs();
LoadTrees();
}
}
[ОБНОВЛЕНИЕ] Я перебираю древовидную структуру после всего приведенного выше кода, он правильно сохраняет их правильный статус. Это проблема с отображением. Я могу успешно изменить любое другое свойство, всплывающую подсказку, текст и т. д., чтобы отобразить их состояние, но флажки не обновляются...