ASP.NET - 如何从数据库有效地创建动态用户特定菜单

时间:2012-03-31 23:57:38

标签: asp.net session caching optimization

这是我第一次在StackOverflow上发帖,但这个网站很棒。提前感谢您提供的任何帮助。

我有一个网站,允许用户根据他们的权限访问不同的页面,因此每个用户在登录时都需要动态生成他们的菜单。但是,用户的选项可能不会经常更改。

该网站目前有一个母版页面,可以从数据库中提取其页面列表并构建菜单。每次用户加载页面时都会这样做。

我想减少对数据库的调用,因此开始将菜单数据放入Session变量中。我希望有经验的人可以帮助我确保这是最好的方法。我想我更喜欢将它存储在用户的机器而不是服务器上。

我有这是我主人的页面加载:

User u = new User(Page.User.Identity.Name, Globals.getCnString());
        DataTable menu;
        if(Session["MENU"] == null)
        {
            Session["MENU"] = u.getMenu();
        }
        menu = (DataTable)Session["MENU"];

        foreach (DataRow r in menu.Rows)
        {
           //build menu code here.
        }

再次感谢!

2 个答案:

答案 0 :(得分:1)

如果用户的选项不会经常更改,为什么不在更改发生时构建菜单,将其保存在用户的配置文件表格中(以html格式),然后传递给它在Master页面而不是菜单中的文字控件,这样你就不会将它存储在用户的机器上(不推荐用于网站)。

答案 1 :(得分:0)

使用URL列表创建XML文件。对于每个URL元素,添加权限属性并基于该链接的每个链接的可见性。