寻找一种模式来保持页面字段值返回页面

时间:2009-07-23 10:52:36

标签: asp.net user-interface

我有,例如带有过滤器输入的列表页面,用户可以在返回列表页面之前从中导航到捕获页面,在这里他们可能会花一些时间捕获。当他们返回列表页面时,我希望他们之前的过滤器能够再次自动应用。

这不是火箭科学问题,所以我肯定已经有了无数的解决方案,但我希望在这里得到一些答案,让我了解常用的解决方案。我的直接想法是页面'预设'的会话对象,每页有一个字典。如果存储在比会话更长期的某个地方,这也可以扩展到长期预设。

3 个答案:

答案 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;

}