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