2010-04-28 53 views
1

也許這是漫長的一天,但我無法在CompositeControl中持久保存由ASP.NET ViewState支持的集合。下面是一個簡化版本:在CompositeControl中持久保存由視圖狀態支持的集合

public class MyControl : CompositeControl 
{ 
    public Collection<MyObject> MyObjectCollection 
    { 
    get { 
     return (Collection<MyObject>)ViewState["coll"] == null ? 
     new Collection<MyObject>() 
     : (Collection<MyObject>)ViewState["coll"]; 
    } 
    set { ViewState["coll"] = value; } 
    } 
} 


public partial class TestPage : System.Web.UI.Page 
{ 
    protected void btn_Click(object sender, EventArgs e) 
    { 
     myControl1.MyObjectCollection.Add(new MyObject()); 
    } 
} 

當單擊該按鈕時,事件處理btn_Click執行罰款,但對於MyObjectCollection二傳手不會被調用,因此新的MyObject()永遠不會被持久化。

我想我只是有一個金髮的時刻。任何人都喜歡幫忙嗎?

回答

1

在你的收藏上撥打Add()與調用MyObjectCollection屬性上的setter不同。

正是出於這個原因,像FxCop這樣的工具建議你沒有集合屬性setter - 要麼設置私人或完全刪除它。

您可能需要實現自己的集合類型並重寫Add和Remove方法,以便在調用它們時執行持久性代碼。

+0

回想起來,顯而易見的解決方案。感謝指針......真是漫長的一天。 – tomfanning 2010-04-28 20:27:10