例如,我有一个带有过滤器输入的列表页面,用户可以从该页面导航到捕获页面,在返回到列表页面之前,他们可能会在那里花费一些时间进行捕获。当他们返回到列表页面时,我希望再次自动应用他们之前的过滤器。
这不是一个火箭科学问题,所以我确信已经有了无数的解决方案,但我希望在这里得到一些答案,以启发我解决这个问题的常用模式。我的直接想法是为页面‘pre-set’创建一个会话对象,每个页面有一个字典。如果存储在比会话更长的地方,这也可以扩展到更长期的预设。
发布于 2009-07-23 20:35:43
我在一个实用程序类中有一些辅助函数,我在其中传递要保存或加载到会话中的控件。通常,我会在初始页面加载时调用load,并在用户执行搜索或我想保存的时候调用save函数。
我为要保存到会话中的每种控件创建了一个新的重载。这里有一个用于TextBox的。我不确定这是不是非常好的代码,但它似乎工作得相当好。
public void SaveToSession(TextBox control, HttpSessionState session, string SectionKey)
{
session[SectionKey + control.ID] = control.Text;
}
public string LoadFromSession(TextBox control, HttpSessionState session, string SectionKey, string DefaultValue)
{
string ReturnValue = "";
if (session[SectionKey + control.ID] != null)
{
control.Text = session[SectionKey + control.ID].ToString();
ReturnValue = session[SectionKey + control.ID].ToString();
}
else
{
control.Text = DefaultValue;
ReturnValue = DefaultValue;
}
return ReturnValue;
}发布于 2009-07-23 10:55:30
会话是存储这类信息的好地方。我看不出在这种情况下使用Session对你不起作用的原因。
发布于 2009-07-23 11:06:56
是的,您可以将每个页面的过滤器存储在字典对象中,该对象本身可以放入会话中,如下所示:
IDictionary<string,string> pageFilters;
if(Session["filters"]==null){
pageFilters = new Dictionary<string,string>();
Session["filters"]=pageFilters;
}else{
pageFilters=(IDictionary)Session["filters"];
}
if(pageFilters.ContainsKey(CURRENT_PAGE_NAME OR KEY))
{
pageFilters[CURRENT_PAGE_NAME OR KEY]=/*FILTER FOR PAGE*/;
}else{
pageFilters[CURRENT_PAGE_NAME OR KEY]=/*FILTER FOR PAGE*/;
}https://stackoverflow.com/questions/1170977
复制相似问题