首页 新闻 会员 周边

求助自定义Attribute的使用

0
悬赏园豆:20 [已解决问题] 解决于 2013-12-13 20:51

原始路径地址:http://q.cnblogs.com/q/28529/

为什么的我点击时间没有效果是不是哪儿不对?
public partial class Index : System.Web.UI.Page
{

protected void Page_Load(object sender, EventArgs e)
{
}

[ValidatePermission(1, 10)]
protected void Button1_Click(object sender, EventArgs e)
{
HttpContext.Current.Response.Redirect("index.aspx?id=2&p=Button1_Click");
}
}

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true)]
public class ValidatePermissionAttribute : Attribute
{
private readonly int _permissionNum;
private int _currentUserPermissionNum;
public ValidatePermissionAttribute(int permissionNum, int currentPermissionNum)
{
this._permissionNum = permissionNum;
this._currentUserPermissionNum = currentPermissionNum;
ValidateAccountPermission();
}
public int PermissionNum
{
get
{
return this._permissionNum;
}
}
public int CurrentPermissionNum
{
get
{
return this._currentUserPermissionNum;
}
}

public void ValidateAccountPermission()
{
if (PermissionNum != CurrentPermissionNum)
{
HttpContext.Current.Response.Redirect("Error.aspx");
}
}

}

我现还在还是菜鸟的主页 我现还在还是菜鸟 | 初学一级 | 园豆:186
提问于:2013-12-12 23:50
< >
分享
最佳答案
0

attribute,是不具体事情,具体的事情是通过反射,获得特性标签中内容,在具体做处理,最常用的就是序列化,用Serializable特性

   //假如说序列化下面这个类
    [Serializable]
    class MyClass
    {
        
    }

    using (MemoryStream stream = new MemoryStream())
            {

                BinaryFormatter formatter = new BinaryFormatter();
                formatter.Serialize(stream,p);  //Serizlize方法内部,通过反射的方式获取Serializable特性,在做具体的事情处理
            }
收获园豆:10
秋壶冰月 | 大侠五级 |园豆:5903 | 2013-12-13 00:55

我在以前见过一个代码  他的功能是 

 

ajax 的 异步访问的函数上添加特性 

 

判断这个IP的请求频率,条件错误,那么不允许访问

我现还在还是菜鸟 | 园豆:186 (初学一级) | 2013-12-13 12:38

个代码很简单 记不得了 好像不是aop

我现还在还是菜鸟 | 园豆:186 (初学一级) | 2013-12-13 12:39

@我现还在还是菜鸟: 我上次回的是关于attribute的,我感觉你现在用这种方式去实现,不是更好,也不是很方便,

秋壶冰月 | 园豆:5903 (大侠五级) | 2013-12-13 14:27

@秋壶冰月: 谢谢  我其实 找的是这个东西今天找到了

 

http://www.cnblogs.com/shanyou/archive/2010/03/29/1699511.html

 

但是我想把他用到应用程序中  不知道怎么去事项  可能真的要用到AOP  

我现还在还是菜鸟 | 园豆:186 (初学一级) | 2013-12-13 20:50
其他回答(3)
0

Attribute可以认为是对类、方法、属性的一个标识,比如楼上所说的类标识为Serializable(可以序列化的),它只是一个标记而已,没有方法动作可言。

如果你想完成你你所说的功能,你可以把它标识为要验证权限的,在真正执行Button1_Click前,你可以通过反射获取此方法的Attribute标记,然后进行相应的处理。不过觉得你的这个要实现的功能没必要这样做

收获园豆:5
junjieok | 园豆:779 (小虾三级) | 2013-12-13 08:10
0

除了做标记,使用Attribute一般都要配合反射一起使用

收获园豆:3
幕三少 | 园豆:1384 (小虾三级) | 2013-12-13 08:25
0

HttpContext.Current.Response.Redirect("Error.aspx",true);

 

用这个试试看。

收获园豆:2
水晶途途 | 园豆:1443 (小虾三级) | 2013-12-13 10:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册