我有,例如带有过滤器输入的列表页面,用户可以在返回列表页面之前从中导航到捕获页面,在这里他们可能会花一些时间捕获。当他们返回列表页面时,我希望他们之前的过滤器能够再次自动应用。
这不是火箭科学问题,所以我肯定已经有了无数的解决方案,但我希望在这里得到一些答案,让我了解常用的解决方案。我的直接想法是页面'预设'的会话对象,每页有一个字典。如果存储在比会话更长期的某个地方,这也可以扩展到长期预设。
答案 0 :(得分:1)
会话是存储此类信息的好地方。在这种情况下,我没有看到任何使用Session对你不起作用的原因。
答案 1 :(得分:1)
是的,您可以在字典对象中存储每个页面的过滤器,该字典对象本身可以放入会话中,如:
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*/;
}
答案 2 :(得分:0)
我在实用程序类中有一些辅助函数,我传入要保存或加载到会话的控件。通常我会在初始页面加载时调用加载,并在用户执行搜索后或在我想保存的任何其他地方调用保存函数。
我为要保存到会话的每种控件创建一个新的重载。这是一个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;
}