我的网站使用网络用户控件。将为我的一组用户设置用户控件的属性。例如,如果我有 20 个用户访问我的网站,其中 5 个可能使用 id = 1 的用户控件,4 个使用 id = 2 的用户控件。我有一个与每个用户控件关联的属性,我希望在访问公共 ID 的用户之间共享该属性。
我想到了以下几点:
- 保存 id/proprty 值数组组合的应用程序变量
- 为用户控件创建静态属性,但是我觉得该值将在所有用户之间共享,而与 ID 无关。
- 或者将其存储在数据库中[我想减少与数据库的交互。]
请指教。
我的网站使用网络用户控件。将为我的一组用户设置用户控件的属性。例如,如果我有 20 个用户访问我的网站,其中 5 个可能使用 id = 1 的用户控件,4 个使用 id = 2 的用户控件。我有一个与每个用户控件关联的属性,我希望在访问公共 ID 的用户之间共享该属性。
我想到了以下几点:
请指教。
如果您决定不使用数据库,请记住,如果您的应用程序扩展到多台服务器,您可能需要重新访问您的架构,否则您的控件可能最终会在不同服务器上为相同的 id 显示不同的信息。
如果您对此感到满意,那么您可能需要考虑将您的信息存储在 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
}
不确定我是否理解正确;假设您要显示/隐藏基于id
.
如果是这样,那么如何:
您在加载时在您的控件中提供一个开关盒;检查id
并设置要共享的项目的可见性。
比如说,id
是用户角色。因此,基于此,我会:
switch (nRoleID)
{
case 1: //Set controls visibility and hide others/
break;
case 2: //Do something.
break; ;
default: //Hide all
break;
}
只是大声思考。
请记住 HTTP 是无状态的,因此您的前 2 个选项将不起作用。
最好的选择是将多个用户共有的信息存储为 DB。