当我在页面中使用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的名字时,要将默认构造函数设置为私有 的。