0

ここで参照されている優れた投稿を使用しています: 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;
    }
}

セッション ラッパーが続きます。コンストラクターで「Null Reference」エラーが発生します。

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 と Grade のペアをセッションに追加および削除できるようにすることです。たとえば、これはセッションに存在するペアを取得し、それらを一時リストに追加し、新しいペアを一時リストに追加してから、すべてをセッションに保存します。

    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();
    }

誰かが私が間違ったことを指摘できますか?

4

1 に答える 1