在我的 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 类中?在母版页?在 MVP BasePresenter 中?
谢谢 ~S
最佳答案
我已经使用您提到的用户特定缓存完成了相同的操作。我实际上是在一个单独的命名空间中实现它的,尽管它是静态获取属性。例如:
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
。
关于asp.net - 存储常用值的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/433345/