在寫自己的控件的時候我們不可能一直只定義string,int等內置類型的屬性-夜路走多了總會撞鬼的.當遇到復雜屬性(自定義的類型)時,我們該如何來保存其視圖狀態呢.這個問題困擾了我很久...
下面我想用幾個小例子表達下自己的'捉鬼'經歷.
Husband
namespace Controls { using System; using System.Collections.Generic; using System.Text; using System.Web.UI; public class Husband: Control { public Wife MyWife { get { . } set { ViewState["MyWife"] = value; } } } public class Wife { private string m_Name; private int m_Age; public string Name { get { return m_Name; } set { m_Name= value; } } public int Age { get { return m_Age; } set { m_Age= value; } } } }
看見這段代碼,很多朋友估計都要罵我了,為什麼呢,運行下吧:發現會拋出以下異常
Type 'Controls.Wife' in Assembly 'Controls, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
在看見這種異常後,以前我都會直接在Wife前面加上[Serializable]Attribute,加上之後的確運行成功了但是很不幸,這種方式是要挨板磚的.