【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 ...
随机推荐
- Java课程设计 猜数游戏个人博客
1.团队课程设计博客链接 http://www.cnblogs.com/tt1104/p/7064349.html 2.个人负责模块或任务说明 1.成绩排行榜算法的设计: 2.排行榜存放到文件中, 3 ...
- 201521123096《Java程序设计》第十周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
- 201521123109 《java程序设计》第13周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图.OneNote或其他)归纳总结多网络相关内容. 2. 书面作业 1. 网络基础 1.1 比较ping www.baidu.com与ping cec.jmu ...
- 微信小程序中发送模版消息注意事项
在微信小程序中发送模版消息 参考微信公众平台Api文档地址:https://mp.weixin.qq.com/debug/wxadoc/dev/api/notice.html#模版消息管理 此参考地址 ...
- Spring第一篇【介绍Spring、引入Spring、Spring六大模块】
前言 前面已经学习了Struts2和Hibernate框架了.接下来学习的是Spring框架-本博文主要是引入Spring框架- Spring介绍 Spring诞生: 创建Spring的目的就是用来替 ...
- MyBatis学习(一)简介及入门案例
1.什么是MyBatis? MyBatis是一个支持普通SQL查询,存储过程,和高级映射的优秀持久层框架.MyBatis去掉了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装.MyBati ...
- 用vue开发一个app(3,三天的成果)
前言 一个vue的demo 源码说明 项目目录说明 . |-- config // 项目开发环境配置 | |-- index.js // 项目打包部署配置 |-- src // 源码目录 | |-- ...
- thinkphp5.0无限极分类及格式化输出
首先我们来看数据表 从上图中可以发现,中国下有贵州,北京两个子节点,而北京有天安门一个子节点,纽约的子节点是"纽约的子类". 从pid为0看出,中国和纽约是顶级节点. 因为贵州的p ...
- 12 Nonlinear Transformation
一.二次假设 实际上线性假设的复杂度是受到限制的, 需要高次假设打破这个限制 假设数据不是线性可分的,但是可以被一个圆心在原点的圆分开, 需要我们重新设计基于该圆的PLA等算法吗 不用, 只需要通过非 ...
- Linux学习——Shell基础
1 shell概述 Shell 是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用shell来启动,挂起,停止甚至编写一些程序. Shell 还是一 ...