У меня есть список типов List<JobSeeker>
. Я хочу сохранить его в ViewState. Как это можно сделать?
private List<JobSeeker> JobSeekersList { get; set; }
У меня есть список типов List<JobSeeker>
. Я хочу сохранить его в ViewState. Как это можно сделать?
private List<JobSeeker> JobSeekersList { get; set; }
В основном вам нужно использовать только get
, а затем получить либо получить опубликованные данные из состояния просмотра, либо установить его в первый раз в состоянии представления. Это более надежный код, чтобы избежать всех проверок на каждом вызове (есть состояние представления, существует и т.д.), А также прямую сохраненную и использовать объект состояния представления.
// using this const you avoid bugs in mispelling the correct key.
const string cJobSeekerNameConst = "JobSeeker_cnst";
public List<JobSeeker> JobSeekersList
{
get
{
// check if not exist to make new (normally before the post back)
// and at the same time check that you did not use the same viewstate for other object
if (!(ViewState[cJobSeekerNameConst] is List<JobSeeker>))
{
// need to fix the memory and added to viewstate
ViewState[cJobSeekerNameConst] = new List<JobSeeker>();
}
return (List<JobSeeker>)ViewState[cJobSeekerNameConst];
}
}
Альтернатива, чтобы избежать is
// using this const you avoid bugs in mispelling the correct key.
const string cJobSeekerNameConst = "JobSeeker_cnst";
public List<JobSeeker> JobSeekersList
{
get
{
// If not on the viewstate then add it
if (ViewState[cJobSeekerNameConst] == null)
ViewState[cJobSeekerNameConst] = new List<JobSeeker>();
// this code is not exist on release, but I check to be sure that I did not
// overwrite this viewstate with a different object.
Debug.Assert(ViewState[cJobSeekerNameConst] is List<JobSeeker>);
return (List<JobSeeker>)ViewState[cJobSeekerNameConst];
}
}
а класс JobSeeker
должен быть [Serializable]
как
[Serializable]
public class JobSeeker
{
public int ID;
...
}
и вы просто вызываете его нормально как объект и никогда не будете равны нулю. Также будет возвращено сохраненное значение viewstate после сообщения назад
JobSeekersList.add(new JobSeeker(){ID=1});
var cget = JobSeekersList[2].ID;
private IList<JobSeeker> JobSeekersList
{
get
{
// to do not break SRP it better to move check logic out of the getter
return ViewState["key"] as List<JobSeeker>;
}
set
{
ViewState["key"] = value;
}
}