本文参考:http://www.cnblogs.com/willick/p/3208427.html

1、特性(Attribute)对程序中的元素进行标注,比如类、字段、方法、属性等。

2、在.NET Remoting的远程对象中,若要传递或调用某个对象,则该对象所属的类则必须标注[Serializable]。

3、在构建XML Web服务时,使用[WebMethod]特性让通过Http请求的的返回值编码成XML进行传递。

4、下列示例模拟ASP.NET MVC中的[StringLength]特性:

  • StringLength特性定义
    /// <summary>
/// 自定义的带有可选命名参数的 StringLenthAttribute 特性类。
/// 该特性通过AttributeUsage限制它只能用在属性和字段上。
/// </summary>
[AttributeUsage(AttributeTargets.Field | AttributeTargets.Property)]
public sealed class StringLengthAttribute : Attribute
{
public StringLengthAttribute(string displayName, int maxLength)
{
this.MaxLength = maxLength;
this.DisplayName = displayName;
} /// <summary>
/// 显示的名称,对外是只读的,所以不能通过可选参数来赋值,必须在构造函数中对其初始化。
/// </summary>
public string DisplayName { get; private set; } /// <summary>
/// 长度最大值,对外是只读的,所以不能通过可选参数来赋值,必须在构造函数中对其初始化。
/// </summary>
public int MaxLength { get; private set; } /// <summary>
/// 错误信息,标注时可作为可选命名参数来使用。
/// </summary>
public string ErrorMessage { get; set; } /// <summary>
/// 长度最小值,标注时可作为可选命名参数来使用。
/// </summary>
public int MinLength { get; set; }
}
  • StringLength特性应用
    /// <summary>
/// 应用自定义MyStringLenth特性于Order类的OrderID属性之上。MinLength和ErrorMessage是命名参数。
/// </summary>
public class Order
{
[StringLength("订单号", , MinLength = , ErrorMessage = "{0}的长度必须在{1}和{2}之间,请重新输入!")]
public string OrderID { get; set; }
}
  • StringLength特性验证
static void Main(string[] args)
{
string input;
Order order;
do
{
Console.WriteLine("请输入订单号:");
input = Console.ReadLine();
order = new Order { OrderID = input };
}
while (!IsValid(order)); Console.WriteLine("订单号输入正确,按任意键退出!");
Console.ReadKey();
} /// <summary>
/// 验证输入是否合法
/// </summary>
/// <param name="order"></param>
/// <returns></returns>
private static bool IsValid(Order order)
{
if (order == null) return false; return typeof(Order).GetProperties().All(p => IsMemberValid(order.OrderID.Length, p));
} /// <summary>
/// 检查成员字符串长度是否越限。
/// </summary>
/// <param name="inputLength"></param>
/// <param name="member"></param>
/// <returns></returns>
private static bool IsMemberValid(int inputLength, MemberInfo member)
{
foreach (object attribute in member.GetCustomAttributes(true))
{
if (!(attribute is StringLengthAttribute)) continue; StringLengthAttribute attr = (StringLengthAttribute)attribute;
string displayName = attr.DisplayName;
int maxLength = attr.MaxLength;
int minLength = attr.MinLength;
string msg = attr.ErrorMessage; if (inputLength < minLength || inputLength > maxLength)
{
Console.WriteLine(msg, displayName, minLength, maxLength);
return false;
}
else
{
return true;
}
}
return false;
}

【ASP.NET MVC 学习笔记】- 02 Attribute的更多相关文章

  1. ASP.NET MVC学习笔记-----Filter

    ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...

  2. ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现

    ASP.NET MVC 学习笔记-2.Razor语法   1.         表达式 表达式必须跟在“@”符号之后, 2.         代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...

  3. ASP.NET MVC学习笔记-----Filter2

    ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...

  4. ASP.NET MVC学习笔记-----Filter(2)

    接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...

  5. ASP.NET MVC 学习笔记-7.自定义配置信息 ASP.NET MVC 学习笔记-6.异步控制器 ASP.NET MVC 学习笔记-5.Controller与View的数据传递 ASP.NET MVC 学习笔记-4.ASP.NET MVC中Ajax的应用 ASP.NET MVC 学习笔记-3.面向对象设计原则

    ASP.NET MVC 学习笔记-7.自定义配置信息   ASP.NET程序中的web.config文件中,在appSettings这个配置节中能够保存一些配置,比如, 1 <appSettin ...

  6. ASP.NET MVC学习笔记-----ActionInvoker

    还是这张图: 当ControllerFactory生成Controller实例后,这时就需要使用ActionInvoker来选择调用一个合适的Action执行.ASP.NET MVC提供的基类Cont ...

  7. ASP.NET MVC 学习笔记(1)

    从头开始系统地学习ASP.NET MVC 为什么要学习ASP.NET MVC?原因很多,可以先来看一下最早的ASP.NET WebForm的一些缺点: 传说中面试经常要问到的ASP.NET WebFo ...

  8. ASP.NET MVC学习笔记(一) 从路由开始创建mvc

    之前一篇写一半发现版本太老了,是基于mvc2的. 两本参考书编写的顺序各方面都不太一样.决定重新写一篇. 我这篇文章基于mvc5,vs2015 参考书:Will保哥的ASP.NET MVC4开发指南 ...

  9. ASP.NET MVC学习笔记-----Filter(1)

    Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter AuthorizeAttribute 最先执行,在其他类型的fi ...

随机推荐

  1. 201521123008 《Java程序设计》第十四周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) - ...

  2. 利用ASCII码生成指定规则的字符串

    /** * 上送终端编号的后两位生成规则 总共可以生成 (36*36-1)1295个编号 * 01...09 0A...0Z * 10...19 1A...1Z * ............... * ...

  3. PHP手动注入实验

    课程编写 类别 内容 实验课题名称 PHP手动注入实验 实验目的与要求 1.通过手动注入PHP页面,获取password字段名. 2.了解PHP手动注入的基本原理. 3.了解PHP手动注入的过程和基本 ...

  4. Android 之异步加载LoaderManager

    LoaderManager: Loader出现的背景: Activity是我们的前端页面展现,数据库是我们的数据持久化地址,那么正常的逻辑就是在展示页面的渲染页面的阶段进行数据库查询.拿到数据以后才展 ...

  5. Thinkphp3.2版本使用163邮箱发(验证码)邮件

    今天忽然想写一个用户修改密码的功能,又没有短信接口,只能选择用邮箱发送验证码啦,穷啊,没办法,哈哈,以下为正文. ------------------------------------------- ...

  6. Day4 装饰器——迭代器——生成器

    一 装饰器 1.1 函数对象 一 函数是第一类对象,即函数可以当作数据传递 #1 可以被引用 #2 可以当作参数传递 #3 返回值可以是函数 #3 可以当作容器类型的元素 二 利用该特性,优雅的取代多 ...

  7. AngularJS -- Module (模块)

    点击查看AngularJS系列目录 转载请注明出处:http://www.cnblogs.com/leosx/ 什么是AngularJS的模块 我们所说的模块,是你的AngularJS应用程序的一个组 ...

  8. 进入css3动画世界(二)

    进入css3动画世界(二) 今天主要来讲transition和transform入门,以后会用这两种属性配合做一些动效. 注:本文面向前端css3动画入门人员,我对这个也了解不深,如本文写的有纰漏请指 ...

  9. CDH入门

    cloudera(CDH)官网介绍:安装包.离线包该如何下载.官方文档等介绍http://www.aboutyun.com/thread-8908-1-1.html(出处: about云开发) 进入C ...

  10. Vue状态管理vuex

    前面的话 由于多个状态分散的跨越在许多组件和交互间各个角落,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue提供了vuex.本文将详细介绍Vue状态管理vuex 引入 当访问数据对象时,一个 V ...