状況は下部に記載されているように (Mvc ではなく Webworms を使用)、
おそらく、ほとんどすべての Web アプリケーションでセッション変数の実装を「マスター」する必要があるため、簡単に管理できる専用のクラスを作成しました。
アプローチは次のとおりです
この最初のコード ブロックは使用のためのものです。次のコード ブロックで、それが呼び出しているクラスを確認できます。
あいまいさを避けるために(接頭辞なしで)意図的にスペルミスの名前を使用しています..そして、そのようにIntelliSenseではるかに簡単に見つけることができました。
//'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 のインスタンスです。つまり、すべてを 1 つのバンドルとしてstruct
「グループ化」または「結合」します。globals
そのため、グローバル変数を保存する必要がある場合はいつでも、提供する必要がある適切な構造変数に値を割り当てCurSesVarStruct
ます。
そして、セッション変数に1回アクセスするだけで、「変数コレクション」を抽出するだけです- object
、...実際にはセッション変数であるため、名前を一定に保ちます-_CurrentSesionGlobals
背景を説明するために最善を尽くしましたが、要するに:
セッション変数の 1 つとしてセッションに格納されるのは構造体です - データ型 =object
または、セッション間で保存される構造体のクローンと言えます。
それを_CurrentSesionGlobals
使用することで、次のようにセッションから必要な値にアクセスできます。
に格納する前に構造体を割り当てSession
ます。
CurSesVarStruct.SelectedUercustid = custID;
次に、次の方法-ExtrctSesnVar()
以下を使用すると、たとえば次のように使用できます。
最後のセッションで保存された変数を抽出します。
custID = ExtractSesnVar().SelectedUercustid;
実際にSelectedUercustid
は構造体メンバーの 1 つです。
問題
_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
現在、例外エラーが発生していますが、存在しないセッション変数の値を取得しようとしています。
次のコード ブロック .
これは、すべての Web サイト アプリケーションのヘルパーとしてソリューションに追加するクラスです。
それは実際には名前空間です。したがって、セッション変数の処理を担当するクラスは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;
}
}
}
}