我有一个MVC应用程序,在20分钟后超时。我为Session变量中的下拉列表存储了一些值。如果用户允许页面超时然后刷新页面,则下拉列表中没有值。
处理此问题的最佳方法是什么?
答案 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
文件中提供超时值。