在会话状态中存储复杂对象

时间:2014-02-28 00:14:46

标签: c# asp.net .net viewstate

我的App_Code文件夹(.NET项目)下有一个名为“StateBag.cs​​”的单独的类

使用System; 使用System.Text;

[Serializable()]
public class MyStateBag
{
    public MyStateBag(){}
    private string _MemberID = string.Empty;
    public string MemberID
    {
        get { return _MemberID; }
        set { _MemberID = value; }
    }
}

现在我希望能够从我的Web项目的任何页面更新MemberID值。

例如: -

Default.aspx.cs: -

  public partial class _Default : System.Web.UI.Page
  {
    public StateBag MyStateBag
    {
        get { return (StateBag)Session["MyStateBag"]; }
        set { Session["MyStateBag"] = value; }
    }

    protected void Page_Init(object sender, EventArgs e)
    {
        this.MyStateBag = (StateBag)Session["MyStateBag"];
    }

    .... }

在我的Default.aspx.cs页面上我试图将memberID的值设置为MyStateBag: -

 if (HttpContext.Current.Session["MyStateBag"] == null)
        {
            HttpContext.Current.Session["MyStateBag"] = new StateBag();
        }
        ((StateBag)HttpContext.Current.Session["MyStateBag"]).MemberID = memID;

然而我遇到了冲突: - 'System.Web.UI.StateBag'不包含'MemberID'的定义,也没有扩展方法'MemberID'接受类型为'System.Web.UI.StateBag'的第一个参数'(你丢失了吗?) using指令或程序集引用?)

我是否必须在我错过的Default.aspx.cs页面上引用某些内容?

如何才能访问它...说我在另一页,“About.aspx.cs”。

我希望能够说: - memberinfo = StateBag["MemberID"]

任何人都可以帮我理解这个吗?

1 个答案:

答案 0 :(得分:3)

您保存到Session对象的任何内容都将留在该用户访问您的网站时。所以在Default.aspx.cs上你可能有类似的东西:

//Make sure there is an object saved for this user
if(Session["StateBag"] == null)
   Session["StateBag"] = new StateBag();

//Set what you need
((StateBag)Session["StateBag"]).MemberID = 1234;

然后在另一个页面上,你可以用同样的方式访问它

//Make sure there is an object saved for this user
if(Session["StateBag"] == null)
   Session["StateBag"] = new StateBag();

//Get what you need
int memberID = ((StateBag)Session["StateBag"]).MemberID