2013-12-06 4 views
0

У меня есть приложение C#, где мне нужен список, чтобы «запомнить» то, что было ранее введено в нем.Список оповещён при отправке

http://oi40.tinypic.com/2ivhcuw.jpg

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

List<Information> infoList = new List<Information>(); 
Information data = new Information(); 

firstName = resultEntry.Properties["givenname"].Value.ToString(); 
lastName = resultEntry.Properties["sn"].Value.ToString(); 
fullName = firstName + " " + lastName; 

//data.CWID = resultEntry.Properties["username"].Value.ToString(); 
data.FullName = fullName; 
// data.Email = resultEntry.Properties["email"].Value.ToString(); 

infoList.Add(data); 
+0

при работе в asp.net, есть несколько способов для «г. emembering 'свойство, вы можете разместить его в сеансе или в скрытом поле. или вы могли бы запомнить его в базе данных и удалить его впоследствии, если он не был использован. – Schuere

+0

Не могли бы вы уточнить? –

ответ

2

Для хранения элементов в сессии:

Session["MyInformation"] = data; 

прием данных из сеанса

List<information> data = (List<information>)Session["MyInformation"]; 

Но остерегайтесь: Сессии должны быть забыты.

Можно подумать о просмотре, но остерегайтесь здесь: viewstates делает страницу медленной. (легко проверить, насколько большой html-страница появляется, когда добавляется viewstate)

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

Написать печенье: http://msdn.microsoft.com/en-us/library/78c837bd(v=vs.100).aspx

Читайте печенье: http://msdn.microsoft.com/en-us/library/bd70eh18(v=vs.100).aspx

другой вариант для хранения данных в базе данных => это, однако, означает, что больше трафика.

(также небольшой намек на сессии, поместите их в отдельный статический класс, так что вы можете получить их через весь проект вместо одной страницы

public static class MySessions 
{ 
    public static List<Information> MyData 
    { 
    get{ 
     //EDIT in the GET 
     if(HttpContext.Current.Session["MyInformation"] != null) 
      return (List<information>)HttpContext.Current.Session["MyInformation"]; 
     else 
      { 
      HttpContext.Current.Session["MyInformation"] = new List<Information>(); 
      return new List<Information>(); 
      } 
     } 
    set{HttpContext.Current.Session["MyInformation"] = value;} 
    } 
} 

EDIT:

использовать класс как следующим образом: (это статический класс, введя имя класса с последующим собственностью, вы можете вызвать для него вместо первого экземпляра класса

//Set the value from Somewhere 
MySessions.MyData = new List<Information>(); 

//get the values from somewhere 
var myInfo = MySessions.MyData; 
+0

спасибо за подробный ответ, я поставил класс в как вы предложили, но он возвращает ошибку «Сеанс имени не существует в текущем контексте» –

+0

@Corbin Spider: отредактировано попадание внутрь класса – Schuere

+0

@Scheure - все еще появляется ошибка: http://oi44.tinypic.com/ mjtg8w.jpg –

2

В зависимости от продолжительности срока «экономии» (возможно в сессии?):

Используйте ViewState - если вы хотите, чтобы список был пустым при загрузке страницы (а не обратной передачи). (т. е. ViewState["data"] = infoList)

Используйте Session - если вы хотите вручную удалить список на основе какого-либо условия.

+0

спасибо, @Candide Итак, как это применимо к моему коду? Где я инициализирую сессию и где я извлекаю данные из сеанса? –

+1

Хороший ответ, но вы должны знать, что если ваш список достаточно велик, использование Viewstate будет загромождать загрузку страницы. – Ethenyl

+0

@ Ethenyl Да, правда, однако маловероятно, что пользователь войдет в тысячи записей. – Candide

Смежные вопросы