ASP.NET MVC3中Model验证

原文:ASP.NET MVC3中Model验证
 

概述

上节我们学习了Model的数据在界面之间的传递,但是很多时候,我们在数据传递的时候为了确保数据的有效性,不得不给Model的相关属性做基本的数据验证。

本节我们就学习如何使用 System.ComponentModel.DataAnnotations 命名空间中的特性指定对数据模型中的各个字段的验证。

这些特性用于定义常见的验证模式,例如范围检查和必填字段。而 DataAnnotations 特性使 MVC 能够提供客户端和服务器验证检查,使你无需进行额外的编码来控制数据的有效。

System.ComponentModel.DataAnnotations 特性可用于实体数据模型 (EDM)、LINQ to SQL 和其他数据模型。 还可以创建自定义验证特性。

关于DataAnnotations请看System.ComponentModel.DataAnnotations概述

数据级别的验证

创建项目新建名为User的Model类

public class User
{
    public int ID { get; set; }
}

以Create验证为例来学习DataAnnotations 验证。

新建Create方法

//新建
// GET: /User/Create
public ActionResult Create()
{
    return View();
} 

添加视图

注意:在添加视图的时候,如果强类型视图找不到Model,建议在重新生成解决方案。

非空验证

public class User
{
    public int ID { get; set; }

    [DisplayName("姓名")]
    [Required(ErrorMessage = "姓名不能为空")]
    public string Name { get; set; }
}

添加视图直接运行

字符长度验证

public class User
{
    public int ID { get; set; }

    [DisplayName("姓名")]
    [Required(ErrorMessage = "姓名不能为空")]
    public string Name { get; set; }

    [DisplayName("密码")]
    [StringLength(6, ErrorMessage = "密码不能超过6个字符")]
    public string Password { get; set; }
}

添加视图后直接运行

数字验证

 [DisplayName("年龄")]
 [Range(1, int.MaxValue, ErrorMessage = "请输入大于等于1的数")]
 public int Age { get; set; }

添加视图直接运行

正则表达式验证

[DisplayName("电子邮件")]
[RegularExpression(@"^\w+((-\w+)|(\.\w+))*\@[A-Za-z0-9]+((\.|-)[A-Za-z0-9]+)*\.[A-Za-z0-9]+$",
 ErrorMessage = "请输入正确的Email格式\n示例:abc@123.com")]
public string Email { get; set; }

添加视图后运行效果

业务逻辑验证

远程服务端验证

Remote异步请求验证,在[HttpGet]时获取指定Controller里面的指定方法验证,此方法必须是[HttpGet]标记的,返回类型为Json类型的JavaScript对象。

Model代码

[DisplayName("姓名")]
[Required(ErrorMessage = "姓名不能为空")]
[Remote("GetUser", "User", ErrorMessage = "该姓名已存在")]
public string Name { get; set; }

Controller代码

//HttpGet是必须加的
[HttpGet]
public ActionResult GetUser(string name)
{
    return Json(name != "aa", JsonRequestBehavior.AllowGet);
}

直接添加视图运行

自定义Attbitue验证

Model代码

[Required]
[StringLength(15)]
[LoginUnique]
public string Login { get; set; }

Attribute代码

    [AttributeUsage(AttributeTargets.Field | AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
    public sealed class LoginUniqueAttribute : ValidationAttribute
    {
        private static readonly string DefaultErrorMessage = "login unique";//MUI.login_unique;

        public LoginUniqueAttribute()
            : base(DefaultErrorMessage)
        {
        }

        public override string FormatErrorMessage(string name)
        {
            return DefaultErrorMessage;
        }

        public override bool IsValid(object value)
        {
             return UserService.Check(p=>p.Name==value.ToString());
        }
    }

直接添加视图运行

总结

其实微软DataAnnotations验证一直是在VS平台上面充分运用的,不管是Web程序还是WForm程序甚至是Silverlight程序,都可以使用微软提高的DataAnnotations验证,可以说是无孔不入啊。不过就这三种程序而言,MVC的验证相对来说还是比较完善的,简单适用。

时间: 2024-09-17 04:00:59

ASP.NET MVC3中Model验证的相关文章

ASP.NET MVC3 中的UrlRewrite用法介绍

ASP.NET MVC3中自带的Url重写工具,今天和大家一起分享一下简单的实现过程. 最后要实现的结果:以二级域名的形式传递城市拼音并解析.如下图所示: 第一步:创建一个UrlProvider.cs类文件,其类要继承路由基类RouteBase.  代码如下 复制代码 继承RouteBase后需要实现两个方法: public override RouteData GetRouteData(HttpContextBase httpContext) {     throw new NotImplem

一起谈.NET技术,在ASP.NET MVC3 中利用JSONP跨域登录WEB系统

在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复登陆.每次登录都需要输入用户名和密码.最近比较流行的就是OAuth.新浪微博这个开放系统做的就很好.但OAuth并非本文讨论范畴.这里主要讨论jQuery1.5 jsonp 在Asp.net MVC3 中的应用. 本文应用场景: 假设您的开发团队欲为某集团公司开发一整套信息管理系统,目前首要开发的就是一套订单系统和一套内部OA系统.前提是这两套系统使用

在ASP.NET MVC3 中利用JSONP跨域登“.NET技术”录WEB系统

在信息系统开发的时,根据相关业务逻辑难免会多系统之间互相登录.一般情况下我们需要在多系统之间使用多个用户名和密码.这样客户就需要在多个系统之间重复登陆.每次登录都需要输入用户名和密码.最近比较流行的就是OAuth.新浪微博这个开放系统做的就很好.但OAuth并非本文讨论范畴.这里主要讨论jQuery1.5 jsonp 在Asp.net MVC3 中的应用. 本文应用场景: 假设您的开发团队欲为某集团公司开发一整套信息管理系统,目前首要开发的就是一套订单系统和一套内部OA系统.前提是这两套系统使用

在ASP.NET MVC3中使用“.NET研究”EFCodeFirst 1.0

1. 新建项目 打开VS2010,选择 文件>新建>项目,新建ASP.NET MVC3 Web 应用程序,我这里把它命名为Blog. 2. 编写实体类 对于一个博客,一下几个类应该是必须的吧: Post                             博客文章类 Comment                     文章评论类,和Post是一对多的关系 Category                     目录类,和Post是一对多的关系 Tag                 

一起谈.NET技术,在ASP.NET MVC3中使用EFCodeFirst 1.0

1. 新建项目 打开VS2010,选择 文件>新建>项目,新建ASP.NET MVC3 Web 应用程序,我这里把它命名为Blog. 2. 编写实体类 对于一个博客,一下几个类应该是必须的吧: Post                             博客文章类 Comment                     文章评论类,和Post是一对多的关系 Category                     目录类,和Post是一对多的关系 Tag                 

asp.net mvc3 数据验证(三)—自定义数据注解

原文:asp.net mvc3 数据验证(三)-自定义数据注解         前两节讲的都是asp.net mvc3预先设定的数据注解,但是系统自由的数据注解肯定不适合所有的场合,所以有时候我们需要自定义数据注解.         自定义数据注解有两种,一种是直接写在模型对象中,这样做的好处是验证时只需要关心一种模型对象的验证逻辑,缺点也是显而易见的,那就是不能重用.                                             还有一种是封装在自定义的数据注解中,优

asp.net mvc3 数据验证(四)—Remote验证的一个注意事项

原文:asp.net mvc3 数据验证(四)-Remote验证的一个注意事项         前几篇把asp.net mvc3 中基于Model的主要数据验证的方法都已经讲完了,本节纯粹只是讲一个我曾经遇到的问题,因为和数据验证相关,所以就放在了这系列的文章中.         经过前几篇文章的分享,大家应该觉得asp.net 自带的Remote远程数据注解比较好用,但是我在实际使用中却遇到了问题.         首先,一般来说对于一个属性的验证可能需要不止一个的远程验证,比如对于用户名来说

ASP.NET MVC基于标注特性的Model验证:一个Model,多种验证规则

对于Model验证,理想的设计应该是场景驱动的,而不是Model(类型)驱动的,也就是对于同一个Model对象,在不同的使用场景中可能具有不同的验证规则.举个简单的例子,对于一个表示应聘者的数据对象来说,针对应聘的岗位不同,肯定对应聘者的年龄.性别.专业技能等方面有不同的要求.但是ASP.NET MVC的Model验证确是Model驱动的,因为验证规则以验证特性的形式应用到Model类型及其属性上.这样的验证方式实际上限制了Model类型在基于不同验证规则的使用场景中的重用.通过上一篇文章<将V

ASP.NET MVC基于标注特性的Model验证:将ValidationAttribute应用到参数上

ASP.NET MVC默认采用基于标准特性的Model验证机制,但是只有应用在Model类型及其属性上的ValidationAttribute才有效.如果我们能够将ValidationAttribute特性直接应用到参数上,我们不但可以实现简单类型(比如int.double等)数据的Model验证,还能够实现"一个Model类型,多种验证规则",本篇文章将为你提供相关的解决方案(源代码从这里下载). 一.ValidationAttribute本身是可以应用到参数上的 如果你够细心应该会