C# can';在asp.net中使用继承的类中不使用会话

C# can';在asp.net中使用继承的类中不使用会话,c#,asp.net,session,C#,Asp.net,Session,我创建了一个从另一个类继承的网页,如: class webpage : startup { . . . } class startup : System.Web.UI.Page { } 在我尝试使用的startup类中 Session["blah"] = "some other blah"; 但无论何时运行此代码,都会出现以下错误: 会话状态只能在以下情况下使用: enableSessionState设置为true, 在配置文件中或在 页面指令。请同时制作 确定 System.We

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

class webpage : startup {
.
.
.
}


class startup :  System.Web.UI.Page  {

}
在我尝试使用的startup类中

Session["blah"] = "some other blah";
但无论何时运行此代码,都会出现以下错误:

会话状态只能在以下情况下使用: enableSessionState设置为true, 在配置文件中或在 页面指令。请同时制作 确定 System.Web.SessionStateModel或 自定义会话状态模块为 包括在 \\ 应用程序中的节 配置

即使在将web.config更改为接受会话后,我也会出现错误,但结果相同 ------------------------编辑--------------------

我知道我可以使用Httpcontext.current.session,但这种方法也会给我错误提示: “您不能使用空实例或类似的东西”
我该怎么办?

我已经创建了一个
BasePage
类,如下所示:

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;
      }
   }
}
我在访问会话时没有任何问题。不确定问题出在哪里,但从Page旁边的另一个类继承很可能是一种误导

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

更新 好心地寄给我一个重新创建问题的测试解决方案

这一问题存在于该组织的特质之中。有问题的代码如下所示:

public class BasePage: Page
{
    public BasePage()
    {
        //Do some stuff with Session
    }
}
不幸的是,尝试访问构造函数中的会话是无法启动的,因为请求和响应对象直到调用构造函数之后才被设置。诀窍是将代码移动到一个阶段,在这个阶段中,这些东西已经初始化,但在其他依赖代码可能需要利用它之前

这件事会成功的。如果您摆脱了构造函数,并重写了OnPreInit事件,那么一切都应该正常。像这样:

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

    //Do some stuff with Session
}

了解页面生命周期是在ASP.Net中执行任何操作的关键组件。在继续使用Web表单之前,您应该彻底阅读MSDN文档,因为这将省去很多后顾之忧。

在其他页面中会话可以正常工作吗?这听起来像是一个配置问题。还有,可能是你换了一条线?(或者可能您不是从页面事件中调用的?)是的,会话照常直接从.aspx文件或甚至从global.asax工作,但不在其他类中:(顺便说一句,我正在使用IIS 6.0和.net 4.0,我已经创建了一个类似于您的新项目,甚至有一个更干净的web.config,但结果是一样的:-?如果您需要,可以压缩解决方案并通过电子邮件发送给我。这可能是真正解决问题的唯一方法,因为它可能是特定于机器的。即使在IIS7中,我仍然有同样的问题,我可以找不到你的电子邮件这是我的:wisdomtooth84@gmail.com请给我发电子邮件,这样我就可以把我的项目发给你了