2010-12-03 13 views
1
public class MessageHelper : System.Web.UI.MasterPage 
{ 
    public MessageHelper() 
    { 

    } 

    public string Message 
    { 
     set { Session["Message"] = value; } 
     get 
     { 
      if (Session["Message"] != null) 
      { 
       var msg = Session["Message"] as string; 
       Session["Message"] = ""; 
       return msg; 
      } 
      return ""; 
     } 
    } 

    public string ErrorMsg 
    { 
     set { Session["Error"] = value; } 
     get 
     { 
      if (Session["Error"] != null) 
      { 
       var err = Session["Error"] as string; 
       Session["Error"] = ""; 
       return err; 
      } 
      return ""; 
     } 
    } 
} 


[NullReferenceException: Object reference not set to an instance of an object.] 
    System.Web.UI.UserControl.get_Session() +15 
    WebApplication1.MessageHelper.get_ErrorMsg() in ..file.master.cs:71 

:場合(!セッション[ "エラー"] = null)のASP.NETとNullReferenceException()

は、私はここで間違って何をやっています! (原作者から転写)

EDIT:

@デビッド、

ここではAdminMaster.master.csです:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.SessionState; 

namespace WebApplication1 
{ 
    public partial class AdminMaster : System.Web.UI.MasterPage 
    { 
     protected void Page_Load(object sender, EventArgs e) 
     { 
      MessageHelper msg = new MessageHelper(); 

      if (msg.ErrorMsg != "") 
      { 
       // do something 
      } 
      if (msg.ErrorMsg != "") 
      { 
       // do something 
      } 
     } 
    } 
    public class MessageHelper : System.Web.UI.MasterPage 
    { 
     public MessageHelper() 
     { 

     } 

     public string Message 
     { 
      set { System.Web.HttpContext.Current.Session["Message"] = value; } 
      get 
      { 
       if (System.Web.HttpContext.Current.Session["Message"] != null) 
       { 
        var msg = System.Web.HttpContext.Current.Session["Message"] as string; 
        System.Web.HttpContext.Current.Session["Message"] = ""; 
        return msg; 
       } 
       return ""; 
      } 
     } 

     public string ErrorMsg 
     { 
      set { System.Web.HttpContext.Current.Session["Error"] = value; } 
      get 
      { 
       if (System.Web.HttpContext.Current.Session["Error"] != null) 
       { 
        var err = System.Web.HttpContext.Current.Session["Error"] as string; 
        System.Web.HttpContext.Current.Session["Error"] = ""; 
        return err; 
       } 
       return ""; 
      } 
     } 
    } 
} 

ので、それがするSystem.Web.UIから継承しません.MasterPage、私の悪い。

私は、サイトの異なるページからMessageHelperにアクセスしたいと考えています。すべてのページがマスターファイルを使用しているので、私はMessageHelperをマスターファイルに置きます。

ここで何が間違っていますか?

+0

セッション自体はnullでもかまいません。 @Marcie、実際には – Marcie

+0

です。 @NATTO、 '.ErrorMsg'を呼び出す/参照しているコードはどこですか? –

+0

どうして?どうすればこのエラーを解決できますか? – natiz

答えて

4

デバッグ中にSessionがヌルでないことを確認できますか?このクラス内でSystem.Web.HttpContext.Current.Sessionという完全修飾名を参照して、それが何かを助けるかどうかを確認してください。

編集:あなたが投稿以外の回答の回答を受けて ...

あなたのマスターページと同じファイルにそのヘルパークラスを置くことをお勧めしません。クラスの名前を付けた独自のファイルに入れます。 (おそらくすべてのクラスが独自のファイルを持っているべきかどうかについて議論されているかもしれませんが、この特定のケースでは、この1つのファイルの2つのクラスは非常に無関係で、一緒ではないはずです。 (WebApplication1よりも説明的なものを使用することをお勧めしますが、プロジェクトのどこかでエラーが発生するためここで変更しようとしないでください)、他のクラスファイルはその名前空間を参照することができますそのクラスを使用するにはusing WebApplication1.Helpersです。

クラスを直感的な構造(または複数のプロジェクト、複雑さが増すにつれて)に分けることで、将来的にサポートが容易になります。

ファイル全体を見ると、ヘルパークラスは間違いなくMasterPageから継承されるべきではありません。それは必要ではなく、そうすることでそのクラスには存在してはいけないものが追加されます。

+0

さて、それは問題を解決するように思えました。何が原因でしょうか?私はどこから継承すべきですか...? – natiz

+0

@NATTO:頭の上からすべての詳細がわからないのですが、 'HttpContext.Current'はページがあらかじめ参照しているものです。あなたは別のクラスを作成していますが、それは 'MasterPage'から継承していますが(なぜなら、それを行うことをやり遂げないものとしてクラスを拡張するのは奇妙です)、そうではないようです'HttpContext.Current'シングルトンを認識し、空の' Session'を参照するだけです。 – David

+0

まあ、クラスをマスターファイルに置いて、別のページからアクセスできる可能性があるので、別のクラスに入れています。 – natiz

0

私はあなたがMessageHelperクラスで達成しようとしていることで少し混乱しています。

マスターページに共通するコードの場合、必ずMessageHelperからAdminMasterを継承する必要があります。

例えば、

public partial class AdminMaster : MessageHelper 

もしそうでなければ、なぜMessageHelperがMasterPageから継承する必要があるのか​​分かりません。

関連する問題