2015-01-26 3 views
1

У меня есть веб-сайт, где пользователю нужно сделать простой шаг 1 - шаг 4, поэтому я решил сохранить все данные в Session Object, на шаге 2 - шаг 4 пользователь может вернуться к предыдущему шаг для проверки формы (данные будут заполняться сессией)ASP.NET MVC поддерживает объект Session

мой вопрос. можем ли мы сохранить новое значение/объект в сеанс, сохраняя предыдущее значение?

Session["regis"] = student.firstname 

// i want object_a value still remain in Session["regis"] 
Session["regis"] = student.lastname 

или мне нужно сделать более 1 сессии?

Session["Step1"] = student.firstname 

Session["Step2"] = student.lastname 
+0

Как вы кодирования в MVC, было бы лучше передать объект и с видом или еще лучше реализовать steps1-4 немного, как немного в некоторой стороне клиента сценария в JQuery или некоторые такие. Затем вы могли бы POST завершить объект за один раз, что может даже помочь с проблемой, так же хранить неполные записи в конце. –

ответ

0

Вы потеряете предыдущее значение, когда новые значения присваиваются объект сеанса с тем же ключом в вашем случае т.е. зарегистри Таким образом, вы должны использовать второй вариант.

Вы можете использовать сцену, чтобы создать/получить доступ к объекту сеанса, как

Чтобы установить значение в сессии

Session["Step" + stepIndex] = student.firstname; 

Чтобы получить значение из сессии

string str = Session["Step" + stepIndex].ToString(); 
+0

, так что в моем случае единственный способ - сделать 1 или более сеансовых ключей? – user3848402

+0

Вам нужно больше одного ключа, или вы можете сохранить некоторую коллекцию/массив в объекте сеанса, но для этого потребуется кастинг. Если у вас есть только четыре этапа и требуется только четыре клавиши, вы можете избежать сборов и просто использовать четыре клавиши. – Adil

1

Да. Вы можете сохранить несколько значений в сеансе под разными клавишами, как в вашем втором примере (обратите внимание, что это тот же сеанс, только другой ключ). Однако, это не будет делать то, что вы хотите, чтобы:

Session["regis"] = student.firstname 

// This will overwrite the first value 
Session["regis"] = student.lastname 

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

Будьте осторожны при хранении вещей в сеансе. Очень легко вызвать нежелательное поведение. Например, пул приложений может истечь, потеряя данные сеанса; если вы работаете в сбалансированной нагрузке среде, пользователи могут потерять свои сеансы, когда они попадают на другой сервер приложений; если пользователь запускает несколько вкладок, переменные сеанса, назначенные в запросах с одной вкладки, могут влиять на поведение приложения в другом и т. д.

Вместо этого используйте вместо этого куки или скрытые поля. Если вы должны использовать переменные сеанса, рекомендуется по крайней мере генерировать динамические ключи и передавать их со страницы на страницу в строке запроса, чтобы гарантировать, что, например, использование нескольких вкладок не вызывает конфликтов ключей.

0

Другой вариант - хранить объект в сеансе. (Предполагается, что студент является экземпляром класса Student)

private Student StudentSession 
{ 
    get{ return (Student)Session["regis"]; } 
    set{ Session["regis"] = value; } 
} 

Usage,

StudentSession = new Student(); 

StudentSession.Name = "Scott"; 
StudentSession.Surname = "Foo"; 

Вы можете назначить переменные позже фильм на другой странице.

StudentSession.Age = 12;