我正在寻找一些想法,以便在不使用会话变量,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中反序列化,但是如果访问并加载了一个属性,则在下一个请求时不会记住它。
有什么建议吗?
答案 0 :(得分:1)
文件系统有时是一种有用的持久性机制。