我在项目中使用ASP.NET。我试图设置一个会话变量并在aspx文件中访问它的值。
在VB.NET中,我将会话变量设置为:
Partial Class MainSite_Default
Inherits System.Web.UI.Page
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Session("TestVariable") = "Lorem ipsum"
End Sub
End Class
在相应的aspx文件中,我可以使用<%=Session("TestVariable")%>
访问其值。
这很好用。但是,现在让我说我在C#中重写它,并尝试类似地设置会话变量:
public partial class Mainsite_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {
Session["TestVariable"] = "Lorem ipsum";
}
}
再一次,在aspx文件中,我尝试使用<%=Session["TestVariable"]%>
访问其值。
在这种情况下,Session["TestVariable"]
为空。该值似乎没有被分配。我也尝试过将Session
更改为HttpContext.Current.Session
而没有运气。
我在C#中设置会话变量是错误的吗?
有趣的是,如果我在MasterPageFile中设置会话变量,那么我可以在aspx文件中访问它。但是,如果我将它放在Page_Load
类的Mainsite_Default
方法中,那就不行了。但是,如果我在VB.NET中的Page_Load
方法中设置变量,它可以正常工作。
答案 0 :(得分:0)
事实证明,AutoEventWireup
在页面顶部的页面指令中设置为false
。这阻止了页面加载事件的触发。当我将其更改为true
时,一切都按预期开始工作。
经过进一步调查后,看起来它在VB.NET中有效,因为Handles Me.Load
行显式指定了在加载页面时调用哪个方法,即使AutoEventWireup
设置为false
。但是C#没有Handles
个关键字,因此必须使用+=
运算符或AutoEventWireup
分配事件。
感谢大家的建议。总的来说,他们确实引导我走向解决方案。
答案 1 :(得分:-1)
尝试此操作来声明会话
public static string TestSessionValue
{
get
{
object value = HttpContext.Current.Session["TestSessionValue"];
return value == null ? "" : (string)value;
}
set
{
HttpContext.Current.Session["TestSessionValue"] = value;
}
}
已经解决: 参考文献:How to declare session variable in C#?
答案 2 :(得分:-1)
在某些情况下,会话状态可以为null,以确保您没有获得NullReference异常,最好先检查它。它还优先将字符串存储在变量中,然后将其分配给会话变量。
public partial class Mainsite_Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e) {
string str = "Lorem ipsum";
Session["TestVariable"] = str;
}
}
访问其值
if (Session["TestVariable"] != null)
{
string value = Session["TestVariable"].ToString(); // Don't forget ToString()
}
有关会话变量何时为空的详细信息,请参阅this答案。 以下是答案的一部分
是的,Session对象可能为null,但仅限于某些 情况,你很少会遇到:
- 如果您已禁用SessionState http模块,请禁用 会议
如果您的代码在HttpApplication.AcquireRequestState之前运行
- 醇>
您的代码在IHttpHandler中运行,但未指定 IRequiresSessionState或IReadOnlySessionState接口。如果您只有页面中的代码,则不会遇到此问题。我的大多数ASP .NET 代码使用Session而不重复检查null。它是, 但是,如果你正在开发一个IHttpModule,那就要考虑一下 或者在ASP .NET的粗略细节中落后。