16

次の操作を行うとエラーが発生します。

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

私が得るエラーはこれです:

オブジェクト参照がオブジェクト インスタンスに設定されていません。

どうしてこれなの?私はいつもこの方法でセッションをチェックしますか? 私は MVC フレームワークを使用していますが、これは何か関係がありますか?

編集:

コードはコントローラーのコンストラクターにあります。

public class MyController : ControllerBase
{
    private int mVar;

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

8 に答える 8

21

[] はインデクサーであり、クラスのメソッドのように機能します。

この場合、Session は null であり、インデックス作成を実行できません。

これを行う:

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

セッションは、アクションの処理中にのみ実際に存在します-コントローラーのコンストラクターで有効になるとは思いません。たとえば、コントローラーは (私が知る限り) リクエスト間で再利用される可能性があります。

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

あなたはこのようにそれをしなければならないでしょう-

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

「Session」オブジェクトが null であるため、このエラーが発生しています。したがって、その ["value"] ビットを見ることはできません。私は MVC に詳しくありませんが、Session オブジェクトが作成されないという大きな問題があるか、ライフサイクルの間違った時点でアクセスしているか、Session != かどうかを確認するためのテストが必要です。ヌル。

于 2009-04-17T09:56:36.267 に答える
1

私はこの方法で解決します:

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

}
于 2011-03-20T11:29:15.630 に答える
1

あなたが使用する構文:

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

}

... ASP.NET で Session オブジェクトを確認する正しい方法です。問題は、ASP.NET MVC を使用しているためだと思われます。

おそらく、MVC の専門家の中には、ASP.NET MVC でこれを行う正しい方法について教えてくれる人もいるでしょう。

編集:これを入力しているときに、Marc Gravell が回答を投稿したことがわかりました。それは明るいはずです。

于 2009-04-17T10:04:08.340 に答える