我正在使用.NET 3.5,我需要一些帮助,以便在不同页面之间传输时如何保存数据对象。
这是我的设置:
我有一个四步注册,每个步骤都包含自己的网页。我希望能够在页面之间保存一个对象而不将其保存到数据库中。每个页面都会向此对象添加内容。
为了方便起见,我们假设我有一个像
这样的对象public class MyObject
{
private int myNumber;
private String myName;
private List<Person> myFriends; //Person is simply a class that has a Strign name with getter and setters.
public MyObject()
{
myFriends = new List<Person>();
}
public void setMyNumber(int i){
myNumber = i;
}
public void setMyName(String n)
{
myName = n;
}
public void setMyFriends(List<Person> li)
{
myFriends = li;
}
public void addFriend(Person p)
{
myFriends.Add(p);
}
}
当我到达最后一页并收集了所有数据时,我会将其提交到我的数据库。在c#中执行此操作的最佳方法是什么?任何好的链接或样本都会很棒!
答案 0 :(得分:2)
Http是无状态协议,您可以使用Session变量并将Person的对象存储到Session["variable"] = [Object]
并在最后一页访问它。
答案 1 :(得分:2)
将数据存储在会话中,例如
Session["Test"] = "Hello World"; //store in session
string str = (string)Session["Test"];//retrieving from session
因此,一旦将值存储在会话中,就可以从其他页面中检索它。
答案 2 :(得分:2)
您可以使用会话/ cookie来保存数据。
请参阅下面的如何使用会话的示例代码。
如何:在会话状态中保存值
string firstName = "Jeff";
string lastName = "Smith";
string city = "Seattle";
Session["FirstName"] = firstName;
Session["LastName"] = lastName;
Session["City"] = city;
如何:从会话状态读取值
string firstName = (string)(Session["First"]);
string lastName = (string)(Session["Last"]);
string city = (string)(Session["City"]);
参考:
http://msdn.microsoft.com/en-us/library/ms178581.aspx#CodeExamples
答案 3 :(得分:1)
如果您正在使用进程内会话状态模式,那么您可以在会话中存储此类对象。
否则,您需要采用一些自定义方法,因为每次要检索和存储时,SQL和StateServer模式都会对该对象进行序列化和反序列化 - 不太理想。使用会话状态,即使在这种操作模式下,如果你的对象就像拥有字符串,整数或任何其他基本类型一样简单(在性能方面不会有问题)。
我想如果它是某个向导你不需要存储大数据,所以你可以很好地处理会话状态。
也许您想要存储文本或其他一些重要内容,我相信最好的解决方案是查看具有持久存储API的Windows Workflow Foundation,以便您可以管理工作流(如向导)并保存一些完成一些步骤后的状态,但我再说一遍,这可能是一个很好的矫枉过正。如果此用户注册向导需要大量信息,请接受此建议。