2013-12-18 27 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); } 
}