C#无法检查Session是否存在?
当我执行以下操作时出现错误:
if(Session["value"] != null) { // code }
我得到的错误是这样的:
你调用的对象是空的。
为什么是这样? 我总是这样检查我的会话? 我正在使用MVC框架,这与它有关吗?
编辑:
代码位于Controller的构造函数中:
public class MyController : ControllerBase { private int mVar; public MyController() { if (Session["value"] != null) { mVar= (int)Session["value"]; } } }
会话仅在处理动作期间存在 – 我不希望它在控制器的构造函数中有效。 例如,控制器可能(据我所知)在请求之间重用。
您需要在动作(方法)中执行此操作,或者(可能更恰当地)在动作filter或OnActionExecuting
(etc)方法中执行此操作:
public abstract class ControllerBase : Controller { protected override void OnActionExecuting( ActionExecutingContext filterContext) { // code involving this.Session // edited to simplify base.OnActionExecuting(filterContext); // re-added in edit } }
[]是一个索引器,它就像一个类的方法。
在这种情况下,Session为null,您无法对其执行索引。
做这个:
if(Session != null && Session["value"] != null) { // code }
你必须这样做 –
if(null != HttpContext.Current.Session["Value"]) { //Code here. }
您收到此错误,因为“Session”对象为null。 因此,不可能看到它的[“值”]位。 我不熟悉MVC,但要么没有创建Session对象,要么是在生命周期的错误点访问它,或者你只是需要一个测试来检查Session!=空值。
您使用的语法:
if (Session["mySessionVariable"] != null) { }
…是在ASP.NET中检查Session对象的正确方法。 我怀疑问题是因为您使用的是ASP.NET MVC。
也许我们的一些MVC专家可以启发我们在ASP.NET MVC中执行此操作的正确方法。
编辑:我看到Marc Gravell在我输入时发布了他的答案。 这应该是有启发性的。
我通过这种方式解决:
if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null) { }
if(Session != null && Session["name"] != null && Session["name"].ToString()!="") { //fire code }
你也可以使用:
if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){ // Do something }