会话获取者的行为

时间:2011-11-21 03:07:35

标签: c# asp.net

我有以下属性来获取和设置Session变量......

protected List<Item> SearchResults
{
    get
    {
        if (Session["SearchResults"] == null)
            Session["SearchResults"] = new List<string>();
        return ((List<string>) Session["SearchResults"]).Select(s => new Item(s)).ToList();
    }
    set { Session["SearchResults"] = value.Select(p => p.Serialize()).ToList(); }
}

如您所见,我将项目存储为序列化字符串。 当用户检查GridView中的几个复选框,然后单击提交时,我想修改他选择的Items的Selected属性的值。这是我执行此操作的代码,它工作得很好......

private void RecordSelections()
{
    var searchResults = SearchResults; //localize session list
    foreach (var checkBox in AssignGrid.Rows.Cast<GridViewRow>().Select(r => (CheckBox)r.FindControl("chkSelect")))
    {
        var result = searchResults.FirstOrDefault(r => r.Key == long.Parse(checkBox.Attributes["ItemKey"].ToString()));
        if (result != null) result.Selected = checkBox.Checked;
        SearchResults = searchResults; //store session list
    }
}

我的问题是这个。我发现有必要本地化会话列表(参见注释行),然后存储该会话列表(也注释),但是当我通过getter访问这个Session变量时,它究竟发生了什么呢?我想做类似以下的事情来从列表中取出一个Item并修改它的值。我无法准确回答为什么这不起作用。如果我没有序列化对象(序列化项目的原因是another post)会不会有效?

private void RecordSelections()
{
    foreach (var checkBox in AssignGrid.Rows.Cast<GridViewRow>().Select(r => (CheckBox)r.FindControl("chkSelect")))
    {
        var result = SearchResults.FirstOrDefault(r => r.Key == long.Parse(checkBox.Attributes["ItemKey"].ToString()));
        if (result != null) result.Selected = checkBox.Checked;
    }
}

提前感谢您的帮助。

0 个答案:

没有答案