2013-03-06 70 views
1

登錄時的項目會檢查用戶的詳細信息以及它們所屬的服務區域。這只是一個區域,但現在它們可以屬於多個區域。在會話中保持多個值?

的代碼是如何設置使用Session工作。

var user = (from u in db.tbl_UserServiceAreaDetails 
      where u.tbl_User.UserName.Equals(txt_LoginName.Text) 
      && u.tbl_User.Password.Equals(txt_Password.Text) 
      select u).FirstOrDefault(); 

if (user != null) 
{ 
Session["Username"] = user.tbl_User.UserName; 

Session["ServiceArea"] = user.tbl_ServiceArea.ServiceArea; 

Session["ServiceAreaID"] = user.serviceAreaID; 

ServiceArea現在可以很多。我可以嘗試foreachserviceAreaID這是UserServicearea之間的聯繫表稱爲serviceAreaDetailsserviceAreaID映射到tbl_ServiceAreaserviceAreaIdUserAreaIDtbl_User映射到userId

foreach (ListItem item in user.ServiceAreaID)能正常工作?

如果我得到userId當用戶登錄並將其傳入我的Foreach我可以如何設置爲Session。由於索引頁面顯示servicearea用戶也屬於,現在可以不止一個。

+9

如何簡單地存儲數組/列表,而不是隻是一個單一的價值......注意,你可能要更改密鑰('「ServiceAreaID」'),以避免問題在實際生產系統遷移時。 – 2013-03-06 11:35:40

+0

與您的問題本身無關,但它看起來像在數據庫中以純文本形式存儲密碼。你可能不想這樣做。 – 2013-03-06 11:38:29

+0

@MarcGravell我該怎麼做? – StudentRik 2013-03-06 11:49:15

回答

1

您還可以存儲複雜對象的會話,因此爲用戶創建,所有與IDS的區域被存儲到用戶的一類,並保存這個類在會話

class UserClass 
{ 
    public string userName; 
    public Dictionary<int, string> serviceArea = new Dictionary<int,string>(); 
} 

UserClass user = new UserClass(); 

Session["User"] = user; 

user = (UserClass)Session["User"]; 

回覆評論:
是的,隨便用一個getter &二傳手
是的,那是一個字典是如何工作的,第一個參數是關鍵,第二個數值,它也靈活地用任何物體來使用

UserClass user = new UserClass(); 

user.userName = "Rik"; 

foreach(...serviceArea...) // Or whatever loop you like 
{ 
    user.serviceArea.Add(serviceAreaID, serviceArea); 
} 
+0

在公共字符串userName中我會做'{get; set;}'和'Dictionary'我從來沒有使用過Dictionary。是'serviceareaID'的int和'servicearea'的字符串。我仍然不確定我將如何工作。即:'user.username = user.tbl_user.UserName'?那是對的嗎? – StudentRik 2013-03-06 12:22:53

+0

我在帖子中提供了答覆 – 2013-03-06 13:21:01

+0

那麼,我所有的三個'Sessions'都將在一個用戶會話中嗎? – StudentRik 2013-03-06 13:44:12

0

我覺得是非常有用的是創建對象的列表,並補充說,到會話。然後,您可以將會話變量轉換爲該對象類型並遍歷它。例如:

Public Class someClass 
    Public Property userName as String 
    Public Property FirstName as String  
End Class 

然後,您可以創建這種類型的列表,並把它添加到會話:

dim myList as new list(of someClass) 
dim newSomeClass as new someClass 

newSomeClass.userName="username1" 
newSomeClass.FirstName="Jason" 
myList.add(newSomeClass) 

newSomeClass.userName="username2" 
newSomeClass.FirstName="Frank" 
myList.add(newSomeClass) 

Session.add("mySessionId",myList) 

然後,您可以施放該屆會議myList中和迭代別處:

Dim myList as new list(of someClass) 
if(Session("mySessionId") isNot nothing) then 
    myList = Session("mySessionId") 

    for each n as someClass in myList 
     'iterate 
    next 
end if 

你只需要小心,你完成後摧毀這些會話,你是不是耗時回發之間多少資源。如果您有任何問題,請告訴我。