在我的Webforms 3.5应用程序中,我有一个用户的GridView,显示他们上次登录的时间。该值以UTC格式存储在Users表中。当管理员查看网格时,我希望他们查看管理员在其首选项中选择的时区(也存储在“用户”表中)。
我对GridView正常工作:
<ItemTemplate>
<%# TimeZoneInfo.ConvertTimeFromUtc(Eval("LastLoginDateTimeUTC"), TimeZoneInfo.FindSystemTimeZoneById(UserService.GetUser(HttpContext.Current.User.Identity.Name).DisplayTimeZone))%>
</ItemTemplate>
因此,在这种情况下,每次创建一行时,都会创建一个用户对象。
我想要做的是确定处理返回常用用户特定数据(例如user.DisplayTimeZone)的最佳方法。我有几个想法,但我想得到一些其他人如何做的意见。我正在考虑使用用户特定缓存,但在我有更多想法之前不想实现。
我想避免使用Session对象,但这不是必需的。我更喜欢使用HttpRuntime.Cache。
此外,一旦确定,这个代码应该放在哪里?在一个BasePage类?在MasterPage?在MVP BasePresenter中?
由于 382 4
答案 0 :(得分:2)
我已经使用您提到的用户特定缓存完成了相同的操作。我实际上是在一个单独的命名空间中实现它作为静态get属性。例如:
namespace MyWeb.Session
public static class CurrentUser {
public static int DisplayTimeZone {
get {
// Check cache first.
...
// Cache miss, load from database and store in cache.
...
}
}
}
}
这样每当我需要这个值时,我只需拨打MyWeb.Session.CurrentUser.DisplayTimeZone
。