2013-12-18 26 views
0

我刚刚在课堂上学到了一个关于使用静态属性的痛苦教训。主要是当它们不是加载的aspx页面的一部分时,它们不是浏览器会话特定的。 (请纠正我错误的地方,因为我没有正规的编程教育)关于会话对象,类和智能感知的查询

我自从一直使用Session对象。

我讨厌关于Session对象的主要事情是,他们受到拼写错误,因为它们对于intellisense而言是未知的。

您不能只键入namespace.class.class.setgetproperty,并知道您正在像使用类属性一样引用正确的会话对象。

有没有办法将类和会话对象混合在一起,所以当我调用会话对象时,我可以使用智能感知?

回答

2

创建一个包装Session对象的包装类。但是,最终你仍然需要使用键/值系统。

public class MySessionWrapper 
{ 
    public string MySessionProperty 
    { 
     get 
     { 
      return Session["myProperty"] == null ? null : (string) Session["myProperty"]; 
     } 
     set 
     { 
      Session.Add("myProperty", value); 
     } 
    } 
} 
+0

有趣的方法。我不会想到这一点。 如果该属性位于类文件中,并且引用了说aspx页面后面的代码,那么访问相同会话对象的其他浏览器会话是否会存在任何问题,或者它们是浏览器特定的? – user3071434

+0

是的,这样可以,因为你最终还是访问会话对象。 –

+0

我上个月在FL的Visual Studio Live 360​​会议上,我确实记得其中一位发言者.......我想这是在“如何成为AC#忍者”会议上说三元运算符应该是避免。我不记得原因。但是,我会使用它们,并想知道你的想法是什么?感谢您的时间和见解。 – user3071434

1

你可以把它包装在方法中。举一个例子,假设我们正在存储一个User对象。 类似这样的:

public void SetUser(User user) 
{ 
    Session.Add("User", user); 
} 

public User GetUser() 
{ 
    User user = (User)Session["User"]; 

    return user; 
} 
+0

这也是一个有趣的方法。感谢您的回复。 – user3071434

0

我认为我已经优化了代码。让我知道是否有人看到任何可能成为问题的事情。到目前为止,我没有看到任何问题。

public Users.CurrentUser GetSetCurrentUser 
{ 
    get 
    { 
     if (Session["cUser"] == null) GetSetCurrentUser = new Users.CurrentUser(); 
     return (Users.cUser)Session["CurrentUser"]; 
    } 
    set { Session.Add("cUser", value); } 
}