2012-05-08 53 views
0

可以在私有/公共屬性中獲取/設置會話變量嗎?在屬性字段中的會話

private List<FileAttachment> fileAttachments; 
public List<FileAttachment> FileAttachments 
{ 
    get 
    { 
     if (Session["key"] != null) 
     { 
      fileAttachments = (List<FileAttachment>)Session["key"]; 
     } 
     return fileAttachments; 
    } 
    set 
    { 
     fileAttachments = value; 
     Session["key"] = fileAttachments; 
    } 
} 

這裏的目標是我想要的容器類(該用戶控件的屬性是的),以能夠設置這取決於實體List<T>,並顯示一個儲存在數據庫中現有的附件。

回答

1

這不是很安全; List<T>不是線程安全的。

由於其他請求線程可能正在讀取它,因此您不能在將其分配給屬性後修改列表。

因此,您應該將其設置爲ReadOnlyCollection<T>而不是List<T>
(並確保你的FileAttachment類是不可變的或線程安全的)比


其他,這取決於目前產權。
如果它在控件或頁面上,那很好。

+0

那麼這是否意味着如果它在用戶控件中的容器類不能設置ReadOnlyCollection ?在不同的說明中,似乎最好不要讓該會話屬性的一部分。 – Rod

+0

您或任何人都可以幫助我理解或可視化一個使用案例,如果不恰當地處理可能會出現問題 – Rod

+0

@rod:如果您同時在同一個會話中收到兩個請求,他們將同時修改相同的對象。如果這些對象不是線程安全的,則會變得混亂。 – SLaks