获取并设置无法使用List<>

时间:2011-12-07 13:14:31

标签: asp.net list properties

我试图制作一个get并设置为我的List<>执着。我认为我的意图很清楚代码。我希望列表保留在整个回发中,所以我不会丢失数据。

我做错了什么?感谢我的AlertPopUp,我可以看到Get被触发,但从未被Set。所以当List应该包含几个项时,List会以包含零项的形式返回。

 private List<string> accountIDsSelectedForDeletion = new List<string>();
public List<string> AccountIDsSelectedForDeletion
{
    get {
        if (ViewState["AccountIDsSelectedForDeletion"]!= null)
        {
            accountIDsSelectedForDeletion = ViewState["AccountIDsSelectedForDeletion"] as List<string>;
            AlertPopUp.QuickDebugMessage("getting list from viewstate. Count: "+ accountIDsSelectedForDeletion.Count);            
        }
        AlertPopUp.QuickDebugMessage("returning list");   
        return accountIDsSelectedForDeletion;

    }
    set {
        AlertPopUp.QuickDebugMessage("setting list to viewstate. Count: " + accountIDsSelectedForDeletion.Count); 
        accountIDsSelectedForDeletion = value;

        ViewState["AccountIDsSelectedForDeletion"] = accountIDsSelectedForDeletion;
    }

1 个答案:

答案 0 :(得分:0)

  

可能是因为我用Add()方法改变了List吗?

简而言之,是的。 .Add()正在改变列表,而Set属性作为一个集合作用于列表。

要完成你在这里尝试做的事情,我会从List创建一个继承的类型,这样我就可以将代码注入Add Remove(ext,还有更多)方法。像:

//not syntatically correct sorry
public class MyList : List<string>
{
    public override Add(string NewItem)
    {
        //do a extra peristance step here
        //
        me.Add(NewItem);
    }
}

或者有一个包装私人列表的类&lt;&gt;并管理添加/删除方法,可能像:

public class MyList
{
    private List<string> listItems { get; set; }
    //don't expose the list in a mutable state, IEnumerable instead
    public IEnumerable<string> Items { get { return this.listItems; } }

    public void Add(string NewItem)
    {
        this.ListItems.Add(NewItem);
    }
}

然后在页面级别上将此类型替换为List。

顺便说一句,持续到ViewState膨胀你必须在每页加载的线上发送的信息量。您是否考虑过SessionCache对象?