2010-12-03 6 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: если (! Session [ "Ошибка"] = нуль)ASP.NET NullReferenceException для get_Session()

что я делаю неправильно здесь ?!

EDIT (транскрибируется от автора оригинала):

@David,

здесь 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

@ Марси, действительно. @NATTO, где код, вызывающий/ссылающийся на `.ErrorMsg`? – 2010-12-03 17:50:43

ответ

4

Во время отладки вы можете подтвердить, что Session не имеет значения? Попробуйте сделать ссылку на нее полностью квалифицированной как System.Web.HttpContext.Current.Session в этом классе и посмотреть, поможет ли это кому-либо.

Edit: В ответ на не-ответ ответ, который вы публикуемый ...

Это не рекомендуется ставить этот вспомогательный класс в том же файле, что и ваш мастер-странице. Поместите его в свой собственный файл, названный для класса. (Вероятно, есть дискуссия о том, должен ли каждый класс иметь свой собственный файл, но в этом конкретном случае ясно, что два класса в этом одном файле очень несвязаны и не должны быть вместе.)

Класс может иметь свой собственное имя, например WebApplication1.Helpers (хотя я рекомендую в будущем использовать что-то более наглядное, чем WebApplication1, но не пытайтесь изменить его здесь, потому что это вызовет ошибки в другом месте проекта), а другие файлы классов могут ссылаться на это пространство имен с using WebApplication1.Helpers, чтобы использовать этот класс.

Разделение классов на интуитивную структуру в проекте (или несколько проектов по мере роста сложности) облегчит поддержку в будущем.

И, видя весь файл, класс помощника определенно не должен наследовать от MasterPage. Это не нужно, и это добавляет вещи в этот класс, которого не должно быть.

0

Я немного смущен тем, чего вы пытаетесь достичь с помощью класса MessageHelper.

Если это код, общий для ваших главных страниц, то вы наверняка должны наследовать AdminMaster из MessageHelper.

например.

public partial class AdminMaster : MessageHelper 

Если нет, я не понимаю, почему MessageHelper необходимо унаследовать от MasterPage?

Смежные вопросы