设置和获取会话变量存储在类中

时间:2013-05-21 13:50:59

标签: c# asp.net session

我基本上是在尝试创建一个包含所有会话信息的类,然后设置并随意获取它。

这是我的电话Session["SessionInformation"] = new SessionVar.UserSession();

这是那个班级

public static class SessionVar
{

public class UserSession
{


    public string FullName
    {
        get;
        set;
    }
    public string HomeURL
    {
        get;
        set;
    }
    public bool ValidUser
    {
        get;
        set;
    }

    public int CountID
    {
        get;
        set;
    }

}
}

让我们说在这个例子中我有一个名为CountID_ComboBox的comboBox,而在SelectedIndexChanged上我想将用户特定Session["SessionInformation"] CountID设置为组合框的值。怎么做的?

protected void CountID_ComboBox_SelectedIndexChanged(object sender, Telerik.Web.UI.RadComboBoxSelectedIndexChangedEventArgs e)
{
    //set the session variable here
}

另外,有没有办法在类中循环循环字符串。基本上我想看看该类中的任何变量是否为空。

2 个答案:

答案 0 :(得分:2)

因此,您已创建此强类型UserSession类来处理会话变量。这很好,特别是如果你有一个大型项目,有很多表单和(初级)开发人员。

您已经知道最重要的部分:对于每个新会话,我们都会有一个,只有一个 UserSession对象。

现在,让我们转到实际使用它的部分。您可以使用((SessionVar.UserSession)Session["SessionInformation"])检索对象的引用。让我们深入探讨它:

  1. Session["something"]返回一个对象
  2. 您想要UserSession对象
  3. 我们使用((SessionVar.UserSession)Session["SessionInformation"])并完成了您的投射!
  4. 现在,让我们说,稍后,您决定将该对象从会话移动到viewstate(我说这是一个好主意,请注意)。如果你的代码分散在你的项目中,那么管理这种变化将是一件痛苦的事。

    因此,我们的想法是拥有一个基页,您的所有网页都将从该网页继承。类似的东西:

    public class BasePage : System.Web.UI.Page
    {
    ...
    }
    

    然后将代码放在那里检索UserSession,例如:

    public class BasePage : System.Web.UI.Page
    {
        public UserSession CurrentUserSession
        {
            get
            {
                UserSession userSession = null;
    
                if (Session["UserSession"] == null)
                {
                    userSession = new UserSession();
                    Session["UserSession"] = userSession;
                }
                else
                    userSession = (UserSession)Session["UserSession"];
    
                return userSession;
            }
            private set { }
        }
    }
    

    奖金:请注意,在上面的代码中,我建议一种方法来确保为当前用户获取一个且只有一个对象。

    最后,为了获取空{/ 1}}属性列表,您可以使用以下方法(将其放在string内):

    UserSession

答案 1 :(得分:0)

如果您无法从后面的代码中找到组合框,我将使用发件人来确保我们拥有正确的控件。

var cBox = (RadComboBox)sender;
(SessionVar.UserSession)Session["SessionInformation"].CountID = cBox.SelectedValue;

您的问题的根源似乎是casting