Я создаю пользовательский веб-элемент управления в C #. Он предназначен для взаимодействия с иерархией разрешений. У нас есть разные "сайты", и у каждого сайта есть много "приложений", и у каждого приложения есть много "разрешений"
Итак, у нас есть 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();
}
}
[ОБНОВЛЕНО]
Я перебираю древовидную структуру после всего приведенного выше кода, она правильно хранит их правильное состояние. Это проблема с отображением. Я могу успешно изменить любое другое свойство, всплывающую подсказку, текст и т. Д., Чтобы отобразить их состояние, но флажки не обновляются ...