0

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

这是我的电话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 的组合框,并且在 SelectedIndexChanged 上,我想将用户设置为特定Session["SessionInformation"] CountID于组合框的值。这是怎么做的?

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

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

4

2 回答 2

2

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

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

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

  1. Session["something"]返回一个对象
  2. 你想要你的UserSession对象
  3. 我们使用它进行投射((SessionVar.UserSession)Session["SessionInformation"]),您就完成了!

现在,假设稍后,您决定将该对象从会话移动到视图状态(请注意,我并不是说这是一个好主意)。如果您的项目中散布着该代码,那么管理该更改将是一件痛苦的事。

因此,我们的想法是有一个基本页面,您的所有页面都将从该页面继承。就像是:

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 { }
    }
}

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

最后,为了得到一个string空属性列表,可以使用下面的方法(放在里面UserSession):

    public List<string> GetEmptyStringAttributes()
    {
        List<string> emptyStringAttributes = new List<string>();

        Type type = this.GetType();

        foreach (System.Reflection.PropertyInfo property in type.GetProperties())
        {
            if (property.PropertyType == typeof(String))
            {
                string value = property.GetValue(this) as string;

                if (string.IsNullOrWhiteSpace(value))
                    emptyStringAttributes.Add(property.Name);
            }
        }

        return emptyStringAttributes;
    }
}
于 2013-05-21T14:19:47.840 回答
0

如果您无法从后面的代码中找到组合框,我将使用 sender 以确保我们拥有正确的控制权。

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

您的问题的根源似乎实际上是关于cast

于 2013-05-21T14:06:43.980 回答