2013-12-13 48 views
2

我的asp.net C#项目中有一个名为“admin”的类。
是:如何从会话中获取对象属性

public class Admin 
{ 
    private int ID; 
    private string FirstName, LastName, IsMainAdmin, Email, Username, 
      Password,BirthDate, EntryDate; 

    public int id 
    { 
     get { return ID; } 
     set { ID = value; } 
    } 

    public string firstname 
    { 
     get { return FirstName; } 
     set { FirstName = value; } 
} 

    public string lastname 
    { 
     get { return LastName; } 
     set { LastName = value; } 
    } 
    . 
    . 
    . 

登录后会话被这样创建:

Admin admin = isAdmin(username, password); 
    if (admin != null) 
    { 
     **Session.Add("maskanAdmin", admin);** 
     Response.Redirect("panel.aspx"); 
    } 

在其他页面,我需要从会议获得管理员的ID在后面部分的代码通过jQuery AJAX页面请求后。
请注意,我的代码背后的代码是[WebMethod]不支持会话对象。
我可以得到它吗?怎么样?

+1

这覆盖了会议文件中:http://msdn.microsoft.com/en-us/library/ms178581.aspx – CodingIntrigue

+0

我会告诉你另外一件事。类声明看起来不太好! private int _id;和'public int Id { get {return _id; } set {_id = value; }或简单的'public int ID {get; set;}'。看看[命名指南](http://msdn.microsoft.com/en-us/library/xzf533w0.aspx) –

+0

是的,它是正确的。 –

回答

5
var adminObj = (Admin)Session["maskanAdmin"];  
if(adminObj != null) 
{ 
    var id = adminObj.id; 
    var fname = adminObj.firstname; 
} 

查看更多about Read Values from Session State

更新

我不知道为什么问题在一小时后更新说您正在使用web方法中的代码。

然而,看看Using ASP.NET Session State in a Web Service

+0

您正在通过索引器访问集合查找两次。你也检查两次空。这是不必要的。你可以简单地做:'var adminObj =(Admin)Session [“maskanAdmin”]; if(adminObj!= null){...}' – Silvermind

+0

@Silvermind:随意编辑答案:)我并不确定。这就是为什么要检查这两个地方 –

1

你只需将它转换回,当您从会话检索它的Admin类型的对象:

Admin admin = (Admin)Session["maskanAdmin"]; 

然后你就可以使用对象的属性为正常:

if(admin.ID == someOtherID) 
{ 
    // do stuff 
} 
1
Admin variableName = (Admin)Session["maskanAdmin"]; 
1
var adminObj = Session["maskanAdmin"]; 
if(adminObj != null) 
{ 
    var admin = (Admin)adminObj; 
} 
+0

管理员是一个类,所以在铸造之前检查null是没有必要的。 – Silvermind

+1

@Silvermind - 看起来我每天都在学习新东西。刚刚测试出来,你是正确的。我在考虑如果adminObj为null并且我尝试转换为Admin对象时会发生转换错误。 –

+0

'null'是固定的。所有'null'都指向相同的位置,因此您不必担心在此处投射可为空的对象:)。简单的LinqPad例子:'object a = null; \t string b = null; \t(a == b).Dump(); // True – Silvermind