登录项目会检查用户详细信息及其所属的服务区域。它只是一个区域,但现在它们可以属于多个区域。
代码是使用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
进行serviceAreaDetails
,serviceAreaID
映射到serviceAreaId
tbl_ServiceArea
中的UserAreaID
和userId
tbl_User
foreach (ListItem item in user.ServiceAreaID)
中的userId
。
Foreach
能够工作吗?
如果我在用户登录时收到Session
并将其传递到我的servicearea
,我可以将其设置为{{1}}。由于索引页面显示用户所属的{{1}},现在可以多于一个。
答案 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
您只需要小心,在完成后销毁这些会话,并且您不会在回发之间消耗大量资源。如果您有任何疑问,请与我们联系。