我试图制作一个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;
}
答案 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
膨胀你必须在每页加载的线上发送的信息量。您是否考虑过Session
或Cache
对象?