次の手順を実行するとエラーが発生します。
if(Session["value"] != null)
{
// code
}
私が得るエラーはこれです:
オブジェクト参照がオブジェクトインスタンスに設定されていません。
どうしてこれなの?私はいつもこの方法でセッションをチェックしますか?私はMVCフレームワークを使用していますが、これはそれと関係がありますか?
編集:
コードはコントローラーのコンストラクターにあります。
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
}
}
[]はインデクサーであり、クラスのメソッドのように機能します。
この場合、Sessionはnullであり、インデックスを作成することはできません。
これを行う:
if(Session != null && Session["value"] != null)
{
// code
}
「Session」オブジェクトがnullであるため、このエラーが発生します。したがって、その["value"]ビットを確認することは不可能です。私はMVCに精通していませんが、Sessionオブジェクトが作成されないという大きな問題があるか、ライフサイクルの間違った時点でMVCにアクセスしているか、Session!=かどうかを確認するためのテストが必要です。ヌル。
あなたはこのようにする必要があります-
if(null != HttpContext.Current.Session["Value"])
{
//Code here.
}
使用する構文:
if (Session["mySessionVariable"] != null)
{
}
...は、ASP.NETでSessionオブジェクトをチェックする正しい方法です。 ASP.NETMVCを使用していることが問題の原因だと思います。
たぶん、MVCの専門家の何人かは、ASP.NETMVCでこれを行う正しい方法について私たちに教えてくれるでしょう。
編集:これを入力しているときに、MarcGravellが回答を投稿したことがわかります。それは光り輝くはずです。
if(Session != null && Session["name"] != null && Session["name"].ToString()!="")
{
//fire code
}
私はこの方法で解決します:
if (Session.Count > 0 && Session["mySessionVariable"].ToString() != null)
{
}
次のものも使用できます。
if (Session == null || String.IsNullOrEmpty((string)Session["session_object"])){
// Do something
}