16

执行以下操作时出现错误:

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

我得到的错误是这样的:

你调用的对象是空的。

为什么是这样?我总是这样检查我的会话?我正在使用 MVC 框架,这与它有关吗?

编辑:

代码在 Controller 的构造函数中:

public class MyController : ControllerBase
{
    private int mVar;

    public MyController()
    {
        if (Session["value"] != null)
        {
            mVar= (int)Session["value"];
        }
    }
}
4

8 回答 8

21

[] 是一个索引器,它的作用类似于类上的方法。

在这种情况下,Session 为空,您无法对其执行索引。

做这个:

if(Session != null && Session["value"] != null)
{
   // code
}
于 2009-04-17T09:57:43.550 回答
18

会话仅在操作处理期间才真正存在- 我不希望它在控制器的构造函数中有效。例如,控制器可能(据我所知)在请求之间重复使用。

您将需要在操作(方法)中或(可能更合适)在操作过滤器或OnActionExecuting(等)方法中执行此操作:

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
    }
}
于 2009-04-17T09:59:10.723 回答
2

你必须这样做——

if(null != HttpContext.Current.Session["Value"])
{
    //Code here.
}
于 2009-04-17T09:56:29.543 回答
2

您收到此错误是因为“会话”对象为空。因此,不可能查看它的 ["value"] 位。我不熟悉 MVC,但是要么存在更大的问题,即未创建 Session 对象,要么您在生命周期的错误点访问它,或者您只需要测试来检查 Session !=空值。

于 2009-04-17T09:56:36.267 回答
1

您使用的语法:

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

}

... 是在 ASP.NET 中检查 Session 对象的正确方法。我怀疑问题是因为您使用的是 ASP.NET MVC。

也许我们的一些 MVC 专家可以启发我们在 ASP.NET MVC 中执行此操作的正确方法。

编辑:我看到 Marc Gravell 在我打字时发布了他的答案。这应该是有启发性的。

于 2009-04-17T10:04:08.340 回答
1

我通过这种方式解决:

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

}
于 2011-03-20T11:29:15.630 回答
1
if(Session != null && Session["name"] != null && Session["name"].ToString()!="")
{
   //fire code
}
于 2014-03-08T12:47:07.400 回答
0

您还可以使用:

if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){
   // Do something
}
于 2017-04-28T17:05:02.203 回答