保持多个页面的数据结构?

时间:2011-05-25 09:16:22

标签: c# .net asp.net dataobjects.net

我正在使用.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#中执行此操作的最佳方法是什么?任何好的链接或样本都会很棒!

4 个答案:

答案 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,以便您可以管理工作流(如向导)并保存一些完成一些步骤后的状态,但我再说一遍,这可能是一个很好的矫枉过正。如果此用户注册向导需要大量信息,请接受此建议。