【问题标题】:Access session object variables from a wrapper class从包装类访问会话对象变量
【发布时间】:2013-05-24 21:41:08
【问题描述】:

我一直在使用这里引用的优秀帖子: How to access session variables from any class in ASP.NET?

但是,我想在会话中存储自定义对象类型,但在构造对象会话类时遇到了麻烦。在会话中,我想存储一个 SchoolID 和 Grade 对的列表。 SchoolID-Grade 对象如下所示:

[Serializable]
public class SchoolGrade
{
    public string SchoolID { get; set; }
    public string Grade { get; set; }

    public SchoolGrade(string SchoolID, string Grade)
    {
        this.SchoolID = SchoolID;
        this.Grade = Grade;
    }
}

随后是会话包装器,我在构造函数上收到“空引用”错误。

public class EventSchoolsAndGradesSession
{
    #region " Properties "
    public List<SchoolGrade> schoolgrade  { get; set; }
    #endregion

    #region " Constructors "
    private EventSchoolsAndGradesSession()
    {
        schoolgrade.Add(new SchoolGrade("0", "0"));
    }
    #endregion

    #region " Methods "
    public static EventSchoolsAndGradesSession Current
    {
        get
        {
            EventSchoolsAndGradesSession session = (EventSchoolsAndGradesSession)HttpContext.Current.Session["_EventStudentSchoolAndGrade_"];
            if (session == null)
            {
                session = new EventSchoolsAndGradesSession();
                HttpContext.Current.Session["_EventStudentSchoolAndGrade_"] = session;
            }
            return session;
        }
    }
    #endregion
}

我的目标是能够在会话中添加和删除特定的 SchoolID 和成绩对。例如,这将获取会话中存在的对,将它们添加到临时列表中,将新对添加到临时列表中,然后将所有内容保存回会话:

    protected void AddAllButton_Click(object sender, EventArgs e)
    {
        List<SchoolGrade> selected = new List<SchoolGrade>();
        var current = EventSchoolsAndGradesSession.Current.schoolgrade.ToList();
        if (current != null)
        {
            foreach (SchoolGrade s in current)
            {
                selected.Add(new SchoolGrade(s.SchoolID,
                                                    s.Grade));
            }
        }            

        selected.Add(new SchoolGrade(SchoolsDropDownList.SelectedValue,
                                            GradeDropDownList.SelectedValue));
        EventSchoolsAndGradesSession.Current.schoolgrade = selected.ToList();
    }

谁能指出我做错了什么?

【问题讨论】:

    标签: c# asp.net-4.5 custom-type


    【解决方案1】:

    您正在尝试将新项目添加到该构造函数中的未初始化列表

    试试

    #region " Constructors "
    private EventSchoolsAndGradesSession()
    {
        schoolgrade = new List<SchoolGrade>();
        schoolgrade.Add(new SchoolGrade("0", "0"));
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-29
      • 1970-01-01
      • 1970-01-01
      • 2021-05-05
      • 2018-08-28
      • 2011-11-25
      • 1970-01-01
      • 2015-07-21
      相关资源
      最近更新 更多