2014-02-28 40 views
4

我在我的App_Code文件夹(.NET项目)下有一个独立的类,名为“StateBag.cs​​”在会话状态下存储复杂对象

using System; using 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'接受一个fi可以找到类型'System.Web.UI.StateBag'的第一个参数(您是否缺少使用指令或程序集引用?)

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

我怎样才能访问它...说我在不同的页面上,“About.aspx.cs”。

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

谁能帮助我理解?

+0

尼特:视图状态是*不*会话状态,并为[几乎总是]绑定到一个*特定的*页面(或者说,它存在于生成的HTML中,并在重构服务器端时)。为了在不同的页面上保持状态*,你可能对会话状态感兴趣(因为会话被使用,为什么这个标记的ViewState?),Cookies或者将状态编码到Page URI中。 – user2864740

+0

优秀!请示例代码? – Philo

+0

我试过这个,但我的价值没有被保存: - //HttpContext.Current.Session[“memID”] = memID; // string memberinfo = string.Empty; // memberinfo = HttpContext.Current.Session [“memID”]。ToString(); – Philo

回答

2

任何保存到会话对象的东西都会留在那个用户身边,因为他们在你的网站周围旅行。所以,在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 
+0

它说StateBag doesn; t包含一个定义为MemberID .. – Philo

+1

我敢打赌,你定义的StateBag类与System.Web.UI.StateBag类混淆。尝试将你的StateBag重命名为其他独特的东西。 – JerSchneid

+0

因此我将StateBag.cs​​更改为MyStateBag.cs​​,其余代码现在引用MyStateBag.cs​​。仍然是相同的冲突。如果您想再看一下,我更新了我的代码。 – Philo