我一直在使用会话数组为我的webpart存储状态变量...所以我有这样的属性:
public INode RootNode
{
get
{
return this.Context.Session["RootNode"] as INode;
}
set
{
this.Context.Session["RootNode"] = value as object;
}
}
这通常可行。我发现有时,context.session变量将为null。
我想知道导致会话首先为空的条件是什么,并且当发生这种情况时,最好的方法是保持我的对象?我可以将新的HttpSessionState对象分配给上下文,还是搞砸了?
编辑:好的,所以不只是会话是空的......整个上下文搞砸了。当webpart进入init时,上下文很好......但当它到达dropbox selectedindexchange postback事件时(dropbox包含用于设置rootnode变量的节点id),上下文主要包含null属性。
同样,只有在选择了某些ID时才会发生这种情况。这看起来更像是某种奇怪的错误,而不是我理解会话的问题。
答案 0 :(得分:0)
System.Web.HttpContext.Current.Session
但是,上下文并不依赖于班级。它取决于正在使用的页面/处理程序的上下文。
-Theo
答案 1 :(得分:0)
我不知道这是什么类型的文件,但我的.ashx文件有类似的问题。解决方案是处理程序必须实现IReadOnlySessionState(用于只读访问)或IRequiresSessionState(用于读写访问)。例如:
public class login : IHttpHandler, IRequiresSessionState { ... }
这些接口不需要任何其他代码,但可以作为框架的标记。
希望这会有所帮助。
乔纳森