持久性方法的想法

时间:2010-07-19 16:14:18

标签: asp.net persistence

我正在寻找一些想法,以便在不使用会话变量,cookie,上下文缓存,视图状态或会话数据库的情况下,最好地将对象保留在多个页面请求中。

我有一个网页表单(ASPX),它将包含几个用作“页面”的用户控件,这些控件将以一次一个方式显示:

<uc1:UserControl1 id="controlStep1" runat="server" visible="true" />
<uc2:UserControl2 id="controlStep2" runat="server" visible="false" />
<uc3:UserControl3 id="controlStep3" runat="server" visible="false" />

我有一个用于包含各种参数的对象。这些参数作为查询字符串值进入应用程序,并且此对象延迟加载它们。例如:

public class Situation
{
    private string _jobId;
    private JobType _jobType;

    public string JobId
    {
        get
        {
            if (!String.IsNullOrWhitespace(_jobId))
                return _jobId;

            _jobId = GetFromQueryString("jid");    
            return _jobId;
        }
    }

    public JobType JobType
    {
        get
        {
            if (_jobType != JobType.Default)
                return _jobType;

            _jobType = GetEnumFromQueryString("jtype", typeof(JobType));
            return _jobType;
        }
    }
}

我希望在客户进入Web应用程序时保留此Situation对象,然后通过向导式界面继续,因为用户控制的可见性被切换。目前,我正在客户第一次请求期间在HttpModule中创建一个Situation对象的实例,并将其存储在HttpContext.Current.Items中,但是我想使用延迟加载,以便各种Situation对象属性只是根据需要加载。但是,如果例如在controlStep1上访问属性,我想保持对象的状态,以便如果在controlStep2上访问相同的属性,则getter不必返回查询字符串以获取要求财产的价值。我可以序列化对象并在HttpModule中反序列化,但是如果访问并加载了一个属性,则在下一个请求时不会记住它。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

文件系统有时是一种有用的持久性机制。