2009-08-25 110 views
0

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

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

回答

0

将信息保存为某种形式的存储,例如,一个数据库。

0

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

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

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

-2

我能知道它是否是一个Windows应用程序或如果你要使用的数据库作为源在下拉列表显示的数据的基于Web的应用程序基于Web的应用程序,我们把它作为:

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

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

然后,我们将使用该下拉列表的数据到会话

session["anyname"]=dropdownlist3.selecteditem.text; 

然后根据你我们可以给在web.config文件还超时值。

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); 
     }