13

タイプのリストがありList<JobSeeker>ます。ViewStateに保存したい。これはどのように行うことができますか?

private List<JobSeeker> JobSeekersList { get; set; }
4

2 に答える 2

23

基本的には、を使用するだけで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;
    ...
}

通常はオブジェクトとして呼び出すだけで、nullになることはありません。また、ポストバック後に保存されたビューステート値が返されます

JobSeekersList.add(new JobSeeker(){ID=1});
var myID = JobSeekersList[0].ID;
于 2012-11-18T05:56:43.783 に答える
2
private IList<JobSeeker> JobSeekersList
{
    get
    {
        // to do not break SRP it's better to move check logic out of the getter
        return ViewState["key"] as List<JobSeeker>;
    }
    set
    {
        ViewState["key"] = value;
    }
}
于 2012-11-18T06:27:48.383 に答える