在Web应用程序c#中的所选用户之间共享数据

时间:2010-09-27 08:17:42

标签: c# asp.net-3.5 global-variables static-members data-sharing

我的网站使用网络用户控件。将为一组用户设置用户控件的属性。例如如果我有20个用户访问我的网站,其中5个可能正在使用id = 1,4的用户控件,使用id = 2的用户控件。我有一个与每个用户控件关联的属性,我希望在访问公共ID的用户之间共享。

我想到了以下内容:

  • 应用保存id / proprty值数组合的变量
  • 为用户控件创建静态属性,但我觉得不管id是什么,都会在所有用户之间显示该值。
  • 或者将其存储在数据库中[我想减少与数据库的交互。]

请建议。

3 个答案:

答案 0 :(得分:0)

如果您决定不使用数据库,请记住,如果您的应用程序扩展到多个服务器,您可能需要在此时重新访问您的体系结构,否则您的控件可能最终会在不同的服务器上显示不同的信息。相同的身份。

如果您对此感到满意,那么您可能需要考虑将信息存储在ASP.NET缓存中,例如。

System.Web.Caching.Cache cache = Page.Cache;

List<KeyValuePair<string, object>> controlSetup;

controlSetup = cache.Get("ControlSetup" + this.Id.ToString());

if (controlSetup == null)
{
    // Create the control setup from scratch
    // Put the created control setup into the cache
    cache.Put("ControlSetup" + this.Id.ToString(), controlSetup);
}

foreach (KeyValuePair(string, object) item In controlSetup
{
    // Set the control values
}

答案 1 :(得分:0)

不确定我是否理解正确;假设您要根据id显示/隐藏某些项目。

如果是这样,那么怎么样:

您在加载时提供控制开关盒;检查id并设置您要共享的项目的可见性。

比如说,id是用户角色。基于此,我会:

switch (nRoleID)
{ 
    case 1: //Set controls visibility and hide others/
        break;
    case 2: //Do something.
        break; ;
    default: //Hide all
        break;
}

大声思考。

答案 2 :(得分:0)

请记住HTTP是无状态的,因此您的前两个选项无效。

最好的选择是存储多个用户共同的信息是DB。