在寫自己的控件的時候我們不可能一直只定義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,加上之後的確運行成功了但是很不幸,這種方式是要挨板磚的.