为什么不能在方法外访问Session变量?

时间:2014-07-07 11:08:26

标签: asp.net web

我是ASP.NET的新用户,并试图将每个页面分成变量,事件和方法。我使用几乎在每个方法和事件中使用的会话变量。因此,我尝试在页面级别上提取它,而不是从每个方法中提取它并将其存储在变量中。但是在变量之外无法识别关键字“会话”。这是为什么?

public partial class OnCall_OnCall_History : System.Web.UI.Page
{
#region Variables
string ID = Convert.ToString(Session["ID"]);  //Not allowed 
#endregion

#region PageLoad
protected void Page_Load(object sender, EventArgs e)
{

    if (!IsPostBack)
    {
       string ID  = (string)(Session["ID"]); //Allowed
    }
}
#endregion

}

3 个答案:

答案 0 :(得分:1)

那是因为你在声明中初始化变量,然后该赋值将在构造函数中执行。这发生在Page对象的属性设置之前,以便页面知道有请求和会话。

Init事件处理程序中移动这些分配。该事件发生在其他事件之前,但在Page对象设置正确后。

看起来像这样:

protected string ID;

protected void Page_Init(object sender, EventArgs e) {
  ID = Convert.ToString(Session["ID"]);
}

答案 1 :(得分:0)

我不知道为什么,但你可以像这样使用

string ID = Convert.ToString(HttpContext.Current.Session["ID"]);

所以你的代码可以

public partial class OnCall_OnCall_History : System.Web.UI.Page
{

    string ID = Convert.ToString(HttpContext.Current.Session["ID"]); 
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
              string ID  = (string)(Session["ID"]); //Allowed
         }
    }
}

这两者之间存在差异Difference between Session and HttpContext.Current.Session
What is the difference between these two HttpContext.Current.Session and Session - asp.net 4.0

答案 2 :(得分:0)

会话对象在ASP.NET页面的上下文中可用。需要为asp.net页面上下文以及会话提供请求。

Httpplication - > HttpContext - > HttpSession的

我希望这会有所帮助。