超级简单:巧用ViewState属性

简介:

Demo:/Files/zhuqil/WebApplication4.rar

当我在页面中使用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)]意味着这个attribute 只对property类型可用。在public ViewStateProperty(string in_ViewStateName)中初始化ViewState 的名称。默认情况下,ViewState 的名字为空。如果你想在设置attribute的时候初始化ViewState的名字时,要将默认构造函数设置为私有的。

第三步:在BasePage中,创建一个ViewStateProperties变量来存储有ViewStateProperty标签的属性,在BasePage默认构造函数中初始化它们:

 

代码

GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance)通过反射获得所有的public 和protected属性 。Where(p=>p.GetCustomAttributes(typeof(ViewStateProperty), true).Length > 0)用来过滤有ViewStateProperty修饰的属性。

第四步: 在BasePage中重载LoadViewState 和SaveViewState方法

代码

目的是根据name设置viewstate值,这个name设置在ViewStateProperty标签上,加载ViewState的值,并赋值给有ViewStateProperty修饰的属性

使用它:

 

[ViewStateProperty( " UserID " )]
protected   int  ViewState_UserID {  get set ;}

 或者:

[ViewStateProperty]
protected   int  ViewState_UserID {  get set ;}

在第一个,设置一个名为UserID的ViewState,第二个,您设置名为ViewState_UserID的ViewState。

注意:要实现这样的属性,您不能将它们设置为私有的,因为 GetType().GetProperties(BindingFlags.NonPublic | BindingFlags.Instance) 不能返回private 属性,设置为protected足以满足我们的需要。





本文转自麒麟博客园博客,原文链接:http://www.cnblogs.com/zhuqil/archive/2010/01/30/ViewStateAttribute.html,如需转载请自行联系原作者

相关文章
|
JSON JavaScript 前端开发
JavaScript基础插曲—获取标签,插入元素,操作样式
JavaScript基础插曲—获取标签,插入元素,操作样式
204 0
JavaScript基础插曲—获取标签,插入元素,操作样式
|
Web App开发
【基础】input标签输入框内的输入事件详细分析
【基础】input标签输入框内的输入事件详细分析
665 0
艾伟:控件之ViewState
主题,控件的viewstate状态一“七七八八” 有次,朋友开玩笑说,不知道什么时候,微软会取消viewstate,不再使用隐藏字段在服务器与客户端保存状态!虽然,可以使用客户端技术减少一些回传,但是,一些必要的服务器状态还是要保存的,现在网络带宽已经不是问题,所以在网络上适当的传递一些状态数据,还...
761 0
|
C# 数据安全/隐私保护
WPF 使用附加属性增加控件属性
原文:WPF 使用附加属性增加控件属性 使用附加属性增加控件属性,使得这个附加属性在使用的时候没有局限性,可以在任何的控件中使用它来增加所需要的属性,使得控件的属性使用起来非常灵活   一、自定义附加属性 1 2 3 4 5 6 7 8 9 10 11 ...
896 0
|
Web App开发 前端开发
类选择器和所作用的标签一起写为什么不起作用? - CSDN博客
原文:类选择器和所作用的标签一起写为什么不起作用? - CSDN博客 HTML代码: css样式: 这不是将样式作用于circle类下的有current类的li标签吗?为什么不起作用? 原因: 选择器理解错误! 一般常用的选择器有标签选择器,类选择器,ID选择器,后代选择器等等。
1148 0