如何存储值列表,以便可以在ASP.NET的其他页面中访问它?

时间:2011-11-01 18:17:35

标签: c# asp.net

我的桌子上有10个人的许可。有些用户拥有全部10个权限。

网站中的每个页面都必须检查用户是否具有特定权限。

在主页中,我可以进行查询并将权限列表存储到列表框中,并检查Permission1是否在列表框中,当我导航到其他页面时再次我必须检查权限是否存在于列表框。

此处列表框位于主页中,我将无法在第2页访问它。 我必须在第2页中检查页面加载的权限。

如何访问第2页中的权限列表,我可以添加到会话吗?

有没有更好的方法呢?

5 个答案:

答案 0 :(得分:0)

解决此问题的一般方法是不依赖于呈现的数据到页面,而是直接或通过代理(例如Web服务)利用信息的后备存储。

那么这意味着检查这些权限的所有代码应该有一些方法来访问该表,而不依赖于页面上的表中的数据。如果您使用的是asp,则可以创建一个表示权限表的类,并从每个页面访问它。

答案 1 :(得分:0)

如果您不想在每个页面上运行查询,可以使用会话状态来存储权限。

答案 2 :(得分:0)

您应该将权限数据存储在Page对象的System.Web.SessionState.Session变量中。

例如,声明权限时:

Page.Session.Add("keyName", "value");

当您需要访问信息时,请在页面加载中说:

if(Page.Session.Item("keyName").ToString()=="someValue") //do something

答案 3 :(得分:0)

您可以存储在Session stateApplication state中。

每个用户

Session,所有用户都共享Application(因此您必须提供用于读写的线程同步,例如lock语句)。

答案 4 :(得分:0)

您可以将数据存储在会话变量中,但我完全不喜欢该选项。 Session变量依赖于键来提取其值,它不是强类型的,如果要对应用程序进行负载平衡,则需要一种更精细的方法来使服务器之间的会话保持同步。

我们为这种类型的需求使用一个Class库,它包含我们需要检索的特定数据的Singleton。下面的示例将仅从数据库中检索Permissions列表一次,并将其缓存在单例中。它可以从您的所有页面访问。

    /// <summary>
    /// Singleton that retrieves and stores the common list of permissions.
    /// </summary>
    public static class Permissions
    {
        private static List<String> instance = null;

        /// <summary>
        /// Gets the permissions.
        /// </summary>
        /// <returns></returns>
        static public List<String> GetPermissions()
        {
            if (instance == null)
                instance = DatabaseHelper.GetPermissionsFromDatabase();

            return instance;
        }
    }

这应符合您的要求。