當我在頁面中使用ViewState ,通常是用一個屬性表示,例如:
private int ViewState_UserID
{
get { return (int) ViewState["UserId"]; }
set { ViewState["UserId"] = value; }
}
寫這樣一組代碼感覺比較麻煩,如果能像下面這樣簡單地使用就好了。
[ViewStateProperty("UserID")]
protected int ViewState_UserID { get; set;}
或者
[ViewStateProperty]
protected int ViewState_UserID { get; set;}
這裡介紹一種超級簡單的方式去實現:使用Attribute。
第一步:創建BasePage 類,它繼承System.Web.UI.Page。這裡使用了 Reflection和LINQ。
using System.Reflection;
using System.Linq;
public class BasePage : System.Web.UI.Page
第二步:在BasePage中使用一個內部類ViewStateProperty ,這個類繼承 Attribute 。用Attribute的目的是描述頁面中哪個屬性是viewstate屬性。用這 個屬性來標識viewstate屬性,因此它應該BasePage內部。
代碼
[AttributeUsage(AttributeTargets.Property)]
public class ViewStateProperty : Attribute
{
public string ViewStateName { get; private set; }
internal ViewStateProperty(){
this.ViewStateName = string.Empty;
}
public ViewStateProperty(string in_ViewStateName){
this.ViewStateName = in_ViewStateName;
}
}
[AttributeUsage(AttributeTargets.Property)]意味著這個attribute 只對 property類型可用。在public ViewStateProperty(string in_ViewStateName) 中初始化ViewState 的名稱。默認情況下,ViewState 的名字為空。如果你想在 設置attribute的時候初始化ViewState的名字時,要將默認構造函數設置為私有 的。