C#が、セッションが存在してチェックすることはできませんか?

StackOverflow https://stackoverflow.com/questions/759795

質問

私は、次の手順を実行したときにエラーが発生します

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

私は取得エラーは、この次のとおりです。

オブジェクト参照オブジェクトのインスタンスに設定されていない。

これはなぜでしょうか?私はいつも私のセッションをこのように確認してください?私はMVCフレームワークを使用して、これはそれとは何かを持っているんですか?

EDITます:

コードは、コントローラのコンストラクタである:

public class MyController : ControllerBase
{
    private int mVar;

    public MyController()
    {
        if (Session["value"] != null)
        {
            mVar= (int)Session["value"];
        }
    }
}
役に立ちましたか?

解決

セッションは本当にアクションのの処理の中に存在している - 私はそれは、コントローラのコンストラクタで有効であると期待していません。例えば、コントローラは、(私が知っているすべてのために)要求の間に再使用されるかもしれません。

あなたは、アクションフィルタ、または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
    }
}

他のヒント

[]、それはクラスのメソッドのように動作し、インデクサである。

この場合、セッションがnullであり、あなたがそれにインデックス作成を実行することはできません。

これを行います:

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

あなたはこのようにそれを行う必要があるでしょう -

if(null != HttpContext.Current.Session["Value"])
{
    //Code here.
}
「セッション」オブジェクトがnullであるため、

あなたはこのエラーを取得しています。したがって、それはそれの[「値」]ビットを見てすることは不可能です。私はMVCに慣れていないんだけど、Sessionオブジェクトが作成されていないことにより、より大きな問題はどちらかだ、またはあなたがライフサイクルの間違った時点でそれにアクセスしている、またはあなただけのセッションかどうかを確認するためのテストが必要!=ヌルます。

あなたが使用する構文ます:

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

}

... ASP.NETでのセッションオブジェクトをチェックするための正しい方法です。私はあなたがASP.NET MVCを使用しているため、問題があると思われる。

たぶん、私たちのMVCの専門家の一部は、ASP.NET MVCでこれを行うための正しい方法へと私たちを啓発することができます。

編集の私は、私がこれをタイプしていながら、マルクGravellは彼の答えを掲載していることがわかります。それはilluminatoryする必要があります。

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

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
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top