【问题标题】:webpart context.session is nullwebpart context.session 为空
【发布时间】:2011-01-31 20:52:36
【问题描述】:

我一直在使用会话数组来存储我的 webpart 的状态变量...所以我有一个这样的属性:

    public INode RootNode
    {
        get
        {
            return this.Context.Session["RootNode"] as INode;
        }
        set
        {
            this.Context.Session["RootNode"] = value as object;
        }
    }

这通常可以正常工作。我发现有时 context.session 变量将为空。

我想知道首先导致会话为空的条件是什么,以及在发生这种情况时保持我的对象的最佳方法是什么?我可以只为上下文分配一个新的 HttpSessionState 对象,还是搞砸了?


编辑:好的,所以它不仅仅是空的会话......整个上下文都搞砸了。当 webpart 进入 init 时,上下文很好......但是当它到达 dropbox selectedindexchange 回发事件(dropbox 包含用于设置 rootnode 变量的节点 id)时,上下文主要包含 null 属性。

此外,它似乎仅在选择某些 id 时才会发生。这看起来更像是某种奇怪的错误,而不是我对会话的理解的问题。

【问题讨论】:

    标签: c# asp.net session null httpcontext


    【解决方案1】:

    我不知道这是什么类型的文件,但我对 .ashx 文件也有类似的问题。解决方案是处理程序必须实现 IReadOnlySessionState(用于只读访问)或 IRequiresSessionState(用于读写访问)。例如:

    public class login : IHttpHandler, IRequiresSessionState { ... }
    

    这些接口不需要任何额外的代码,而是作为框架的标记。

    希望这会有所帮助。

    乔纳森

    【讨论】:

      【解决方案2】:

      System.Web.HttpContext.Current.Session

      但是,据说上下文不依赖于类。这取决于正在使用的页面/处理程序的上下文。

      -西奥

      【讨论】:

        猜你喜欢
        • 2012-04-29
        • 2011-05-31
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-02-17
        • 2013-06-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多