繁体   English   中英

不能在 asp.net 中使用的 class 中使用 Session

[英]can't use Session in a class that is using inherited in asp.net

我创建了一个从另一个 class 继承的网页,例如:

class webpage : startup {
.
.
.
}


class startup :  System.Web.UI.Page  {

}

和内部启动 class 我正在尝试使用

Session["blah"] = "some other blah";

但是每当我运行此代码时,我都会收到以下错误:

Session state 只能在 enableSessionState 设置为 true 时使用,无论是在配置文件中还是在 Page 指令中。 还请确保 System.Web.SessionStateModule 或自定义 session state 模块包含在应用程序配置的 \\ 部分中。

即使将 web.config 更改为接受 Session 后,我也会收到错误,但结果还是一样------------编辑----- --------------

我知道我可以使用 Httpcontext.current.session 但这个 approad 也给我错误说:“你不能使用 null 实例或类似的东西”我该怎么办?

我创建了一个BasePage class 如下:

namespace JWC.Examples.WebForms.Base {
   public class BasePage: Page {
   }
}

以及从BasePage继承的默认页面:

namespace JWC.Examples.WebForms {
   public partial class _Default : BasePage {
      protected void Page_Load(object sender, EventArgs e) {
         if (Session["SomeItem"] == null)
            Session["SomeItem"] = 42;
      }
   }
}

我完全没有访问 session 的问题。 不确定问题是什么,但是从 Page 旁边的另一个 class 继承很可能是一个红鲱鱼。

如果不包含很多细节,这将很难诊断。 我能给出的最好建议是创建一个空白的 ASP.Net 项目,然后开始一一移植,这样您就可以系统地消除可能性。

更新

Powers 先生非常友好地向我发送了一个重现问题的测试解决方案。

问题在于ASP.Net 页面生命周期的特性。 有问题的代码看起来像这样:

public class BasePage: Page
{
    public BasePage()
    {
        //Do some stuff with Session
    }
}

不幸的是,尝试在构造函数中访问 Session 是不可能的,因为直到调用构造函数之后才会设置 Request 和 Response 对象。 诀窍是将您的代码移动到已经初始化这些东西的阶段,但在其他依赖代码可能需要利用它之前。

PreInit事件可以解决问题。 如果您摆脱构造函数并覆盖 OnPreInit 事件,那么一切都应该没问题。 像这样:

protected override void OnPreInit(EventArgs e)
{
    base.OnPreInit(e);

    //Do some stuff with Session
}

了解页面生命周期是在 ASP.Net 中执行任何操作的关键组件。 在继续使用 Web Forms 之前,应该彻底阅读 MSDN 文档,因为这样可以省去很多麻烦。

尝试这个

class 网页:启动{

. . . }

class 启动:System.Web.UI.Page {

受保护的覆盖无效 OnPreInit(EventArgs e) {

base.OnPreInit(e); var session = HttpContext.Current.Session["...."];

} }

所以 session 的东西不在stratup的构造函数中,而是覆盖OnPreInit

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM