在Session中保留多个值?

时间:2013-03-06 11:33:47

标签: c# asp.net linq

登录项目会检查用户详细信息及其所属的服务区域。它只是一个区域,但现在它们可以属于多个区域。

代码是使用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现在可以很多。我可以foreach对名为serviceAreaID的{​​{1}}和User之间的链接表中的Servicearea进行serviceAreaDetailsserviceAreaID映射到serviceAreaId tbl_ServiceArea中的UserAreaIDuserId tbl_User foreach (ListItem item in user.ServiceAreaID)中的userId

Foreach能够工作吗?

如果我在用户登录时收到Session并将其传递到我的servicearea,我可以将其设置为{{1}}。由于索引页面显示用户所属的{{1}},现在可以多于一个。

2 个答案:

答案 0 :(得分:1)

您还可以在会话中存储复杂对象,因此为您的用户创建一个类,其中所有带有ID的区域都存储到用户并将此类保存在会话中

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&amp; Setter
是的,这就是一个字典如何工作,第一个参数是键,第二个是值,它也可以灵活地与任何对象一起使用

UserClass user = new UserClass();

user.userName = "Rik";

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

答案 1 :(得分: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

您只需要小心,在完成后销毁这些会话,并且您不会在回发之间消耗大量资源。如果您有任何疑问,请与我们联系。