我正在c#中创建自定义Web用户控件。它旨在与权限层次结构进行交互。我们有不同的“网站”,每个网站都有很多“应用”,每个应用都有很多“权限”
因此,我们有一个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();
}
}
[UPDATE] 在完成上述所有代码后,我遍历树视图,它正确地存储了它们的正确状态。这是显示的问题。我可以成功更改任何其他属性,工具提示,文本等以显示其状态,但复选框不会更新...
答案 0 :(得分:0)
我会使用Fiddler来查看谁在缓存结果。通过查看请求,您将能够判断是否是导致问题的浏览器或服务器。
答案 1 :(得分:0)
或者如果你的客户端没问题,你可以输入一个小的链接按钮,说明刷新,你或者用户可以强制使用这种刷新树视图方法。
答案 2 :(得分:0)
应该很简单,在选项卡的参数中只需添加EnableViewState = false。如果这对您有用,请告诉我。