我是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
}
答案 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的
我希望这会有所帮助。