我的高级项目是在ASP.NET / C#中构建预订系统。我的高级项目的一部分是拥有c#类(并且基本上使用了我在过去几年中学到的所有内容)。我试图做的一件事是在我实例化一个新的“用户”类后,我需要它在页面之间传播。我知道会话状态包含变量,所以我认为会话状态可以工作,我只需键入“Session [”blah“]。”并有权访问其成员。但我没有看到这种情况发生。我意识到会话状态是HTTP上下文,所以我怀疑它无论如何都会工作。但是,有没有其他方法可以实现我所需要的,而无需每次都实例化一个新的用户类?我知道它是一个网页...但我也尽力使其成为一个功能性的在线程序。
为了编码员的缘故,继续使用的代码片段:
cDatabaseManager cDM = new cDatabaseManager();
string forDBPass = Encryptdata(pass_txt.Text.ToString());
string fullName = fname_txt.Text.ToString() + " " + lname_txt.Text.ToString();
cDM.regStudent(email_txt.Text.ToString(), forDBPass, fullName, num_txt.Text.ToString(), carrier_ddl.SelectedValue.ToString(), this);
//ADD - getting a cStudent
cUser studentUser = new cStudent(fullName, forDBPass, email_txt.Text.ToString());
//ADD - session states
Session["cStudent"] = studentUser;
//Session["cStudent"]. //session state will not work with what I am doing
//ADD - transfer to campus diagram
提前致谢!!
编辑:
我要感谢所有发帖和评论的人!我从这个简短的讨论中学到了很多东西。你的所有答案都让我明白了!
答案 0 :(得分:4)
会话将项目存储为对象。只要您的类继承自Object(它确实如此),您就可以将其存储在那里。快速警告,它使用序列化存储该对象,因此您的类必须是可序列化的。
向您的类添加属性,如下所示:
public cStudent CurrentStudent
{
get {
if(Session["CurrentUser"] == null)
return null;
return (cStudent)Session["CurrentUser"];
}
set {
Session["CurrentUser"] = value;
}
}
答案 1 :(得分:4)
来自你的评论:
问题是当我输入
"Session["cStudent"]."
时,我无法访问我的功能。示例:Session["cStudent"].getName()
不提供我的功能。
这是因为[]
的{{1}}索引器设置/返回Session
。编译器不知道您存储了object
对象,因此如果没有强制转换,您无法直接访问属性:
cUser
这里有两件事可能出错:
string name = ((cUser)Session["cStudent"]).getName();
为Session["cStudent"]
,您将获得null
NullReferenceException
不是Session["cStudent"]
,您将获得cUser
如果其中一个条件成立,您应检查这些条件并作出适当反应。
此外,正如其他人所指出的那样,InvalidCastException
类需要标记为cUser
才能存储在Serializable
州。
答案 2 :(得分:2)
从会话状态检索对象值时,将其强制转换为适当的类型。
[Serializable]
public class student
{
public string FirstName { get; set; }
public string LastName { get; set; }
}
在第1页:
student s1 = new student();
s1.FirstName ="James";
s1.LastName = "Bond";
Session["blah"] = s1;
当您想要访问第2页中的Session [“blah”]时
student s2 = (Session["blah"] !=null ? (student)Session["blah"] : null);
现在您可以访问s2的属性s2.FirstName,s2.LastName