【ASP.NET MVC 学习笔记】- 02 Attribute
本文参考: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的更多相关文章
- ASP.NET MVC学习笔记-----Filter
ASP.NET MVC学习笔记-----Filter(1) Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter Au ...
- ASP.NET MVC 学习笔记-2.Razor语法 ASP.NET MVC 学习笔记-1.ASP.NET MVC 基础 反射的具体应用 策略模式的具体应用 责任链模式的具体应用 ServiceStack.Redis订阅发布服务的调用 C#读取XML文件的基类实现
ASP.NET MVC 学习笔记-2.Razor语法 1. 表达式 表达式必须跟在“@”符号之后, 2. 代码块 代码块必须位于“@{}”中,并且每行代码必须以“: ...
- ASP.NET MVC学习笔记-----Filter2
ASP.NET MVC学习笔记-----Filter(2) 接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用 ...
- ASP.NET MVC学习笔记-----Filter(2)
接上篇ASP.NET MVC学习笔记-----Filter(1) Action Filter Action Filter可以基于任何目的使用,它需要实现IActionFilter接口: public ...
- 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 ...
- ASP.NET MVC学习笔记-----ActionInvoker
还是这张图: 当ControllerFactory生成Controller实例后,这时就需要使用ActionInvoker来选择调用一个合适的Action执行.ASP.NET MVC提供的基类Cont ...
- ASP.NET MVC 学习笔记(1)
从头开始系统地学习ASP.NET MVC 为什么要学习ASP.NET MVC?原因很多,可以先来看一下最早的ASP.NET WebForm的一些缺点: 传说中面试经常要问到的ASP.NET WebFo ...
- ASP.NET MVC学习笔记(一) 从路由开始创建mvc
之前一篇写一半发现版本太老了,是基于mvc2的. 两本参考书编写的顺序各方面都不太一样.决定重新写一篇. 我这篇文章基于mvc5,vs2015 参考书:Will保哥的ASP.NET MVC4开发指南 ...
- ASP.NET MVC学习笔记-----Filter(1)
Filter类型 接口 MVC的默认实现 Description Authorization IAuthorizationFilter AuthorizeAttribute 最先执行,在其他类型的fi ...
随机推荐
- 201521123059 《Java程序设计》第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 1.实现线程有两种方法:实现Ruannable接口和继承Thread类: 2.使用线程的start()方法启动线程 ...
- 201521123113《Java程序设计》第9周学习总结
1. 本周学习总结 2. 书面作业 本次PTA作业题集异常 Q1.常用异常 题目5-1 1.1 截图你的提交结果(出现学号) 1.2 自己以前编写的代码中经常出现什么异常.需要捕获吗(为什么)?应如何 ...
- 201521123016《Java程序设计》第12周学习总结
1. 本周学习总结 2. 书面作业 将Student对象(属性:int id, String name,int age,double grade)写入文件student.data.从文件读出显示. 1 ...
- sublime text3 好用的插件!!!
1.首先,你要保证sublime有Package Control,所以,如果没有,那么将Ctrl+`打开sublime控制台,将下列代码复制进去! import urllib.request,os; ...
- XML【介绍、用途、了解XML技术架构、语法】
什么是XML? XML:extensiable markup language 被称作可扩展标记语言 XML简单的历史介绍: gml->sgml->html->xml gml(通用标 ...
- Appium (win7系统)环境搭建----完整版
首先感谢 http://www.cnblogs.com/puresoul/p/4696638.html 和 http://www.cnblogs.com/fnng/p/4540731.html ...
- XML-为XML添加DTD-Schema方法
以后都按照如下方式为XML添加dtd或者schema 1,一般从源码jar包里找dtd文件,拷贝到自己的本地目录中: 比如mybatis在如下目录中有dtd :~/ mybatis-3.2.2-sou ...
- VS问题
ref:https://q.cnblogs.com/q/86096/
- OC——关于KVC
我们知道在C#中可以通过反射读写一个对象的属性,有时候这种方式特别方便,因为你可以利用字符串的方式去动态控制一个对象.其实由于ObjC的语言特性,你根部不必进行任何操作就可以进行属性的动态读写,这种方 ...
- GCD之全局、主线程
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 -(NSString *)fetchData { [NSThread sleepFo ...