0

私は基本的に、すべてのセッション情報を保持するクラスを作成し、それを自由に設定および取得しようとしています。

ここに私の電話がありますSession["SessionInformation"] = new SessionVar.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 という名前のコンボボックスがあり、SelectedIndexChangedSession["SessionInformation"] CountIDで、コンボボックスの値に固有のユーザーを設定したいとします。それはどのように行われますか?

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

また、クラス内の文字列を foreach ループする方法はありますか。基本的に、そのクラスの変数のいずれかが null かどうかを確認したいと考えています。

4

2 に答える 2

2

セッション変数を処理するために、この厳密に型指定されたUserSessionクラスを作成しました。これは、多くのフォームと (ジュニア) 開発者を含む大きなプロジェクトがある場合に特に便利です。

最も重要な部分はすでにご存じでしょう。新しいセッションごとに、オブジェクトは1 つだけです。 UserSession

では、実際に使用する部分に移りましょう。を使用して、オブジェクトの参照を取得できます((SessionVar.UserSession)Session["SessionInformation"])。それに飛び込みましょう:

  1. Session["something"]オブジェクトを返します
  2. あなたはあなたのUserSessionオブジェクトが欲しい
  3. を使用してキャストし((SessionVar.UserSession)Session["SessionInformation"])、完了です。

さて、後で、そのオブジェクトをセッションからビューステートに移動することを決定したとしましょう (これが良い考えだと言っているわけではありません)。そのコードがプロジェクトに散らばっている場合、その変更を管理するのは面倒です。

したがって、アイデアは、すべてのページが継承するbase pageを持つことです。何かのようなもの:

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

おまけ: 上記のコードでは、現在のユーザーに対して 1 つだけのオブジェクトを確実に取得する方法を提案していることに注意してください。

最後に、のプロパティのリストを取得するにはstring、次のメソッドを使用できます ( 内に配置しますUserSession)。

    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;
    }
}
于 2013-05-21T14:19:47.840 に答える