Держите структуру данных на нескольких страницах? - PullRequest
0 голосов
/ 25 мая 2011

Я использую .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 ]

2 голосов
/ 25 мая 2011

Сохранить данные в сеансе, например,

Session["Test"] = "Hello World"; //store in session
string str = (string)Session["Test"];//retrieving from session

Таким образом, после сохранения значения в сеансе его можно получить с других страниц.

2 голосов
/ 25 мая 2011

Вы можете использовать сеанс / 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

2 голосов
/ 25 мая 2011

Http - протокол без сохранения состояния, вы можете использовать переменную Session и сохранить объект Person в Session["variable"] = [Object] и получить к нему доступ на последней странице.

1 голос
/ 25 мая 2011

Если вы используете режим состояния сеанса в процессе, вы можете хранить такой объект в сеансе.

В противном случае вам нужно будет использовать какой-то особый подход, потому что режимы SQL и StateServer будут сериализовывать и десериализовывать этот объект каждый раз, когда вы захотите извлечь и сохранить его - менее оптимальный -. Используйте состояние сеанса, даже в этих режимах работы, если ваш объект такой же простой, как строки, целые числа или любой другой базовый тип (это не будет проблемой с точки зрения производительности).

Полагаю, если вам нужен какой-нибудь мастер, вам не нужно хранить большие данные, так что вы можете быть в порядке с состоянием сеанса.

Возможно, вы хотите сохранить текст или какие-то другие важные вещи, и я считаю, что лучшим решением было бы взглянуть на Windows Workflow Foundation, который имеет API постоянного хранения, чтобы вы могли управлять рабочим процессом (таким как ваш мастер) и сохранять некоторые состояние после завершения некоторого шага, но я повторяю, это может быть хорошим излишним. Воспользуйтесь этим советом, если мастеру регистрации пользователей требуется много информации.

...