阻止登录后在每个帖子上加载母版页内容或加载页面

时间:2012-06-02 10:02:39

标签: asp.net master-pages postback menuitem

我有一个母版页,我有一个菜单。菜单的C#代码在用户控件中,该控件在运行时创建,用户权限存储在DB中。 当前在每个页面上创建请求或发布后退菜单。菜单创建使用DB调用

我担心的是,我可以在每个请求中阻止此数据库调用吗? 表示当用户第一次登录时,我将进行数据库调用以获得用户的许可,之后将为每个请求创建菜单,或者回发没有DB调用菜单。

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

3 个答案:

答案 0 :(得分:0)

在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();
    }
}

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

修改 - 回复评论
创建菜单作为用户控件,然后使用control output caching,以确保在用户登录并在此后保存在缓存中时为其创建。如果您的菜单在用户访问期间没有变化,那么您可以拥有相当积极的缓存,否则如果您的菜单需要响应所做的更改(可能是管理员授予用户另一个菜单项),那么您可以缓存直到更改在数据库中检测到。

有关如何实现部分页面输出缓存的一些示例,请参阅Caching portions of a ASP.NET Page上的MSDN文档

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

我还可以建议我在我的网络应用程序中做了哪些事情。我已经在登录时将整个菜单相关信息放在会话中,然后在该会话的主页中我已经获取了菜单相关信息,而不是每次都去数据库旅行..