会话问题?

时间:2009-08-25 11:43:30

标签: asp.net-mvc

我有一个MVC应用程序,在20分钟后超时。我为Session变量中的下拉列表存储了一些值。如果用户允许页面超时然后刷新页面,则下拉列表中没有值。

处理此问题的最佳方法是什么?

4 个答案:

答案 0 :(得分:0)

将信息保留在某种形式的存储中,例如数据库。

答案 1 :(得分:0)

我假设下拉数据来自数据库。如果是这样,您将需要重新填充会话。我假设您使用的是Windows身份验证 - 否则,如果您使用的是基于表单的身份验证,则还必须让用户通过重定向到登录页面再次登录。

如果下拉数据不是来自数据库,您可以将其存储在Web.config中并从那里进行更新。

你究竟如何处理这个问题取决于你没有提到的细节。例如,在我的一些项目中,检查会话变量是否存在(对页面的每次非帖子访问)都已足够,如果不存在,则使用该信息重新填充会话。

答案 2 :(得分:0)

您可以尝试使用InMemory缓存而不是Session(如果真的需要将它存储在某个地方而不是从数据库获取)。您只需指定密钥(对于每个dd列表)和到期时间

using System.Runtime.Caching;

        public static dynamic Get(string key)
        {
                ObjectCache cache = MemoryCache.Default;
                var item = cache.Get(key);
                return item;
        }

        public static void Put(string key, dynamic ddResult)
        {
                CacheItemPolicy policy = new CacheItemPolicy();
                policy.AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(1); // expiration in one minute
                ObjectCache cache = MemoryCache.Default;
                cache.Set(key, ddResult, policy);
        }

答案 3 :(得分:-2)

如果您打算使用数据库作为源来显示我们提供的下拉列表中的数据,我是否可以知道它是基于Web的应用程序中的Windows应用程序还是基于Web的应用程序:

DropDownList3.DataSource = Class2.details().Tables[0];
DropDownList3.DataBind();

这里Class2是具有名为details的函数名的类,因为我们将使用SQL查询将数据从数据库显示到下拉列表(SELECT查询)。

然后我们将该下拉列表的数据用作

的会话
session["anyname"]=dropdownlist3.selecteditem.text;

然后根据您的意见,我们也可以在web.config文件中提供超时值。