Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 设置并获取类中存储的会话变量_C#_Asp.net_Session - Fatal编程技术网

C# 设置并获取类中存储的会话变量

C# 设置并获取类中存储的会话变量,c#,asp.net,session,C#,Asp.net,Session,我基本上是试图创建一个类,它保存所有会话信息,然后随意设置和获取 这是我的调用Session[“SessionInformation”]=newsessionvar.UserSession() 这是那门课 public static class SessionVar { public class UserSession { public string FullName { get; set; } public string H

我基本上是试图创建一个类,它保存所有会话信息,然后随意设置和获取

这是我的调用
Session[“SessionInformation”]=newsessionvar.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上,我想将特定于用户的
会话[“SessionInformation”]CountID设置为组合框的值。这是怎么做到的

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

另外,是否有一种方法可以在类中foreach循环字符串。基本上,我想看看该类中的任何变量是否为null。

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

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

看起来您的问题的根源实际上是关于。

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

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

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

  • Session[“something”]
    返回一个对象
  • 您需要
    UserSession
    对象
  • 我们使用
    ((SessionVar.UserSession)Session[“SessionInformation”])
    进行了转换,您的操作完成了 现在,让我们假设,稍后,您决定将该对象从会话移动到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 { }
        }
    }
    
    奖金:注意,在上面的代码中,我建议一种方法来确保为当前用户获得一个且仅一个对象

    最后,为了获取空的
    字符串
    属性的列表
    ,您可以使用以下方法(将其放在
    用户会话
    中):

    公共列表GetEmptyStringAttributes()
    {
    List emptyStringAttributes=新建列表();
    Type Type=this.GetType();
    foreach(type.GetProperties()中的System.Reflection.PropertyInfo属性)
    {
    if(property.PropertyType==typeof(String))
    {
    string value=property.GetValue(this)作为字符串;
    if(string.IsNullOrWhiteSpace(value))
    emptyStringAttributes.Add(property.Name);
    }
    }
    返回emptyStringAttributes;
    }
    }
    
    首先尝试编写一些代码。。。你们班现在什么也没做。从你的问题来看,我不确定你是否没有试图重新发明轮子,尽管…@Bartdude它做了我想要它做的事情,它获取并设置了字符串…@Bartdude重点是要有一组会话变量,以一种干净的方式进行管理。我不确定我是否正确回答了你的问题,但你尝试过这个:
    ((SessionVar.UserSession)会话[“会话信息”]).CountID=CountID\u ComboBox.SelectedValue
    ?@AndreCalil我想这可能就是Jr开发人员的评论….+1….推断Jr开发人员将拥有几十个不相交的标量值..像全局变量持有者一样使用会话。:Andre我发现迭代部分错误有一些问题21最佳重载m“System.Reflection.PropertyInfo.GetValue(object,object[])”的方法匹配有一些无效的argument@Mike你把
    GetEmptyStringAttributes
    方法放在哪里了?@Mike事情进展如何?我能帮你进一步吗?
        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;
        }
    }