Question

I get an error when I do the following:

if(Session["value"] != null)
{
   // code
}

The error i get is this:

Object reference not set to an instance of an object.

Why is this? I always check my session this way? I am using the MVC Framework, does this has something to do with it?

EDIT:

The code is in the constructor of a Controller:

public class MyController : ControllerBase
{
    private int mVar;

    public MyController()
    {
        if (Session["value"] != null)
        {
            mVar= (int)Session["value"];
        }
    }
}
Was it helpful?

Solution

The session only really exists during the processing of an action - I wouldn't expect it to be valid in the constructor of a controller. For example, the controller might (for all I know) be re-used between requests.

You will need to do this either in the action (method), or (perhaps more appropriately) in an action filter, or the OnActionExecuting (etc) method(s):

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
    }
}

OTHER TIPS

The [] is an indexer, it acts like a method on the class.

In this case, Session is null and you cannot perform the indexing on it.

Do this:

if(Session != null && Session["value"] != null)
{
   // code
}

You'll have to do it like this-

if(null != HttpContext.Current.Session["Value"])
{
    //Code here.
}

You're getting this error because the "Session" object is null. Therefore it's impossible to look at the ["value"] bit of it. I'm not familiar with MVC, but either there's a bigger problem whereby the Session object isn't being created, or you're accessing it at the wrong point of the lifecycle, or you just need a test to check if Session != null.

The syntax used by you:

if (Session["mySessionVariable"] != null)
{

}

... is the correct way to check for a Session object in ASP.NET. I suspect that the problem is because you are using ASP.NET MVC.

Maybe some of our MVC experts can enlighten us as to the correct way of doing this in ASP.NET MVC.

Edit: I see that Marc Gravell has posted his answer while I'm typing this. That should be illuminatory.

I solve by this way:

if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null)
{

}
if(Session != null && Session["name"] != null && Session["name"].ToString()!="")
{
   //fire code
}

You also can use:

if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){
   // Do something
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top