防止在登录后每次回发或页面加载时加载母版页内容



我有一个母版页,上面有一个菜单。菜单的 C# 代码位于用户控件中,该控件在运行时使用存储在数据库中的用户权限创建。当前在每个页面上创建请求或回发菜单。由于菜单创建使用数据库调用

我担心的是我可以阻止每个请求上的此数据库调用吗?意味着当用户第一次登录时,我将对用户的权限进行数据库调用,之后将为每个请求创建菜单,或者回发没有对菜单的数据库调用。

菜单用户控件的输出缓存是否适用于我的方案?

在page_load方法中使用 Page.IsPostBack 属性。

例如:

private void Page_Load()
{
    if (!IsPostBack)
    {
        // Do anything here you want to only happen when 
        // the page is loaded 1st time
        // such as hit the database for the menu...
        CreateMenu();
    }
}

如果将菜单设置为用户控件,则可以使用缓存(通过参数)来缓存每个用户的菜单,但只能在测试逻辑后添加此菜单,因为在启用缓存时进行调试可能会很棘手。

编辑 - 对评论
的回应将菜单创建为用户控件,然后使用控件输出缓存,以确保在用户登录时为其创建菜单,并在之后保留在缓存中。如果您的菜单在用户访问期间没有更改,那么您可以拥有相当激进的缓存,否则如果您的菜单需要响应所做的更改(可能是管理员授予用户另一个菜单项),那么您可以缓存直到在数据库中检测到更改。

另请参阅有关缓存 ASP.NET 页部分的 MSDN 文档,了解有关如何实现部分页输出缓存的一些示例

您可以在登录期间将检查存储在会话变量本身中。

每次加载页面时,您只需要检查会话变量。

如果您有问题,请告诉我。

我可以建议我在 Web 应用程序中完成的另一件事。我在登录时将整个菜单相关信息放在会话中,然后在该会话的母版页中,我获取了菜单相关信息,而不是每次都去数据库旅行。

最新更新