2010-12-03 26 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 

其中線71是:如果(!會話[ 「錯誤」] = NULL)ASP.NET的NullReferenceException爲get_Session()

我究竟做錯了什麼?

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

會話本身可能爲空。 – Marcie 2010-12-03 17:50:06

+0

@Marcie的確如此。 @NATTO,其中是調用/引用`.ErrorMsg`的代碼? – 2010-12-03 17:50:43

回答

4

在調試過程中,您能否確認Session不爲空?嘗試在此課程中引用它完全限定爲System.Web.HttpContext.Current.Session,看看是否有幫助。

編輯:針對您發佈非答案的答案...

它不建議把那個輔助類在同一個文件作爲母版頁。把它放在它自己的文件名爲該類。 (關於是否每個班級都應該有自己的檔案,可能存在爭議,但在這種特殊情況下,很明顯這兩個檔案中的這兩個檔案是非常不相關的,不應該在一起。)

該班可以有自己的命名空間,如WebApplication1.Helpers(雖然我建議將來使用比WebApplication1更具描述性的內容,但不要試圖在此更改它,因爲它會在項目的其他地方導致錯誤),而其他類文件可以引用該命名空間using WebApplication1.Helpers爲了使用那個類。

在項目中將類分隔成直觀的結構(或多個項目,隨着事物複雜度的增加)將使未來更易於支持。

而且,看到整個文件,輔助類絕對不應該從MasterPage繼承。它不需要,而且這樣做會增加那些不應該在那裏的課程。

0

我對你試圖用MessageHelper類實現的東西有點困惑。

如果它是您的母版頁通用的代碼,那麼您應該從MessageHelper繼承AdminMaster。

例如。

public partial class AdminMaster : MessageHelper 

如果不是,我不明白爲什麼MessageHelper需要從MasterPage繼承?

相關問題