因为情况在底部描述(使用Webworms而不是Mvc),
因为我可能需要“掌握”Session变量的实现,几乎在每个Web应用程序中,我都构建了一个专用的类,可以帮助我轻松地管理它。
方法如下
这个第一个代码块供用,您可以在下一个代码块中看到它正在调用的类
我故意使用拼写错误的名字,以避免歧义(没有任何前缀),...所以我可以通过这种方式更容易地发现它。
//'importing' the class for current project
using SeSn = Debug_Tests.Seseions.SeSn;
// creating an object (usually with name related to currentProject)
public static SeSn.CreatCurrentSesionVariablsStructNamed CurSesVarStruct = new Seseions.SeSn.CreatCurrentSesionVariablsStructNamed();
// the long name helps me in this little 'chaos'
到目前为止,这是struct
的一个实例,即将所有globals
“捆绑”或“绑定”为一个捆绑包,
因此,当我需要存储我的全局变量时,我会将值分配给适当的结构变量CurSesVarStruct
必须提供。
然后,我只需要访问会话变量一次,只提取“变量集合” - object
,...因为它实际上是一个会话变量,我保持它的名称不变 - _CurrentSesionGlobals
我尽力描述背景,但简而言之:
它是作为会话变量之一存储在会话中的结构 - 数据类型= object
或者你可以说要在会话之间保存结构的克隆。
因此要使用_CurrentSesionGlobals
,我可以通过它访问我需要的任何值,如下所示:
在将结构存储到Session
:
CurSesVarStruct.SelectedUercustid = custID;
然后下一个方法 - ExtrctSesnVar()
允许我使用例如:
提取上次会话中保存的变量:
custID = ExtractSesnVar().SelectedUercustid;
所以SelectedUercustid
实际上是结构成员之一。
问题
从会话变量中提取_CurrentSesionGlobals
。
public static SeSn.CreatCurrentSesionVariablsStructNamed ExtrctSesnVar()
{
var CurrAppGlobals = SeSn.GetValueAS.ACloneOfTheStructObj("_CurrentSesionGlobals");
return (SeSn.CreatCurrentSesionVariablsStructNamed)CurrAppGlobals;
//the question is refereing this location.
}
如何为null
结果
或首先询问我要提取的object
/给定Session Variable
是不是null
,还是不存在的条件?
因为它现在有一个异常错误,而我正在尝试获取非现有会话变量的值....
下一个代码块。
这是我在解决方案中添加的一个类,作为每个网站应用程序的帮助。
它实际上是一个命名空间。
所以负责处理会话变量的类是Sesn
namespace Seseions
{
public class Sesn
{
public static bool isNotEmpty()
{
return HttpContext.Current.Session.Keys.Count > 0;
}
public struct CreatCurrentSesionVariablsStructNamed
{
// some of commonly used variables- still testing options..
public int ManagerCustID;
public int SelectedUercustid;
public int recordID;
public int SelectedMonth;
public int SelectedChosenWorker;
public int SelectedYear ;
public string SelectedTable;
public string SelectedColumn;
public string SqlSelectCommandLastQuery;
public string TableOfUsersReference;
public List<string> Fontlist { get; set; }
}
// converts and extract values of session variables
public class GetValueAS
{
public static CreatCurrentSesionVariablsStructNamed ACloneOfTheStructObj(string currntProjectSesVarStructName)
{
if(HttpContext.Current.Session[currntProjectSesVarStructName] != null)
return (CreatCurrentSesionVariablsStructNamed)HttpContext.Current.Session[currntProjectSesVarStructName];
}
public static int _Int(string SesParameterValToReturn)
{
return Convert.ToInt32(HttpContext.Current.Session[SesParameterValToReturn]);
}
public static string _String(string SesParameterValToReturn)
{
return Convert.ToString(HttpContext.Current.Session[SesParameterValToReturn]);
}
public static DataSet _DataSet(string SesParameterValToReturn)
{
return (DataSet)HttpContext.Current.Session[SesParameterValToReturn];
}
public static DataTable _DataTable(string SesParameterValToReturn)
{
return (DataTable)HttpContext.Current.Session[SesParameterValToReturn];
}
public static bool _Bool(string SeSnVarToCheckOn)
{
if (HttpContext.Current.Session[SeSnVarToCheckOn] == null)
return false;
return (bool)HttpContext.Current.Session[SeSnVarToCheckOn];
}
}
// an easy way to access and mange session variables actions
public enum Act
{
Add, Remove, Replace
}
public static void Modify(Act action, string New_SesnVarName= null, object NewP_Value=null, string Currnt_Ses_SesnVarName=null)
{
switch (action)
{
case Act.Remove:
if (isNotEmpty())
HttpContext.Current.Session.Remove(CurSes_ParamName);
break;
case Act.Replace:
HttpContext.Current.Session.Remove(CurSes_ParamName);
HttpContext.Current.Session.Add(New_SesnVarName, NewP_Value);
break;
case Act.Add:
HttpContext.Current.Session.Add(NewQs_SesnVarName, NewP_Value);
break;
}
}
}
}
答案 0 :(得分:3)
请不要这样做。
static
。struct
用于除小型,不可变和无身份类型之外的任何内容看来你过度设计了这个。你需要的只是(现在)是为字符串使用一些常量:
public static class SessionKeys
{
public const string ManagerCustID = "ManagerCustID";
...
}
然后您就可以开始专注于为您的应用增加价值的代码。