正如底部描述的情况(使用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'
到目前为止,这是 a 的一个实例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
/ a given是否不存在或不存在的条件?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;
}
}
}
}