前言

aaarticlea/png;base64,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" alt="" />

asp.net mvc中的验证属性均在‘System.ComponentModel.DataAnnotations’的命名空间下,继承自ValidationAttribute的验证特性,已经定义好的验证特性大都直接应用在自定义数据类型的某个属性上根据相应的验证规则对属性值实施验证,已经定义好的有以下几个:

  • RequiredAttribute:用于验证必需数据字段。
  • RangeAttribute:用于验证数值字段的值是否在指定的范围之内。
  • StringLengthAttribute:用于验证目标字段的字符串长度是否在指定的范围之内。
  • MaxLengthAttribute/MinLengthAttribute:用于验证字符/数组字典的长度是否小于/大于指定的上/下限。
  • RegularExpressionAttribute:用于验证字符串字段的格式是否与指定的正则表达式相匹配。
  • CompareAttribute:用于验证目标字段的值是否与另一个字段值一致,在用户注册场景中可以用于确认两次输入密码的一致性。
  • CustomValidationAttribute:指定一个用于验证目标成员的验证类型和验证方法。

这些验证全都属于服务端的验证,需要回传服务器。输入数据在服务器端验证,如果出现错误,消息还要被回传到客户端,并进行页面刷新才能显示给用户

自定义验证

mvc中所有的验证均继承ValidationAttribute基类,下面要定义CheckAgeAttribute去检验年龄必须在18到30周岁

1,首先创建一个asp.net mvc项目,在models文件夹下定义类Employee

 using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web; namespace MvcApplication2.Models
{
public class Employee
{
[Required]
public string Name { set; get; }
[Required]
[CheckAge]
public DateTime DOB { set; get; }
[Required]
public float Salary { set; get; }
}
}

2.在models文件夹下定义验证类CheckAgeAttribute

 using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Web; namespace MvcApplication2.Models
{
[AttributeUsage(AttributeTargets.Property, AllowMultiple = true)]
public class CheckAgeAttribute : ValidationAttribute
{
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
DateTime dtv = (DateTime)value;
long lticks = DateTime.Now.Ticks - dtv.Ticks;
DateTime dtAge = new DateTime(lticks);
string sErrorMessage = "Age>=18 and Age<=30." +
"Your Age is " + dtAge.Year.ToString() + " Yrs.";
if (!(dtAge.Year >= && dtAge.Year <= ))
{
return new ValidationResult(sErrorMessage);
}
return ValidationResult.Success;
}
}
}

3.在Controllers文件夹中创建HomeController

 using MvcApplication2.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Mvc; namespace MvcApplication2.Controllers
{
public class HomeController : Controller
{
public ActionResult Create()
{
return View();
} [HttpPost]
public ActionResult Create(Employee model)
{
if (!ModelState.IsValid)
{
return View("Create");
}
return View("Create");
}
}
}

4.创建Create视图

@Html.ValidationMessageFor(model => model.DOB)输出某个异常信息
@Html.ValidationSummary()输出包含的所有的异常信息
@Html.ValidationMessageFor(model => model.Salary, "*") 用‘*’代替输出的异常信息
 @model MvcApplication2.Models.Employee
@{
Layout = null;
} <!DOCTYPE html> <html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Create</title>
</head>
<body>
@using (Html.BeginForm())
{
<form method="post" action="@Url.Action("Create", "Home")">
@Html.ValidationSummary() <p>
@Html.LabelFor(model => model.Name)
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name, "*")
</p>
<p>
@Html.LabelFor(model => model.DOB)
@Html.EditorFor(model => model.DOB)
<span style="color: red">
@Html.ValidationMessageFor(model => model.DOB)
</span>
</p>
<p>
@Html.LabelFor(model => model.Salary)
@Html.EditorFor(model => model.Salary)
@Html.ValidationMessageFor(model => model.Salary, "*")
</p>
<input type="submit" value="登录" />
</form>
}
</body>
</html>

5.运行结果

aaarticlea/png;base64,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" alt="" />

asp.net mvc 中的自定义验证(Custom Validation Attribute)的更多相关文章

  1. ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)

    ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...

  2. ASP.NET MVC中使用窗体验证出现上下文的模型在数据库创建后发生更改,导致调试失败(一)

    在ASP.NET MVC中使用窗体验证.(首先要明白,验证逻辑是应该加在Model.View和Controller哪一个里面?由于Model的责任就是负责信息访问与商业逻辑验证的,所以我们把验证逻辑加 ...

  3. asp.net mvc中的后台验证

    asp.net mvc的验证包含后台验证和前端验证.后台验证主要通过数据注解的形式实现对model中属性的验证,其验证过程发生在model绑定的过程中.前端验证是通过结合jquery.validate ...

  4. 在 ASP.NET MVC 中创建自定义 HtmlHelper

    在ASP.NET MVC应用程序的开发中,我们常碰到类似Html.Label或Html.TextBox这样的代码,它将在网页上产生一个label或input标记.这些HtmlHelper的扩展方法有些 ...

  5. 再议ASP.NET MVC中CheckBoxList的验证

    在ASP.NET MVC 4中谈到CheckBoxList,经常是与CheckBoxList的显示以及验证有关.我在"MVC扩展生成CheckBoxList并水平排列"中通过扩展H ...

  6. ASP.NET MVC ValidationAttribute 服务器端自定义验证

    自己开发的公众号,可以领取淘宝内部优惠券 客户端验证 上文只说了客户端的自定义验证,这样对于用户的输入还是不够可靠,用户完全可以绕过我们定义的客户端验证.所以仅有客户端的验证还是不够的,我们还需要在服 ...

  7. 在ASP.NET Core中实现自定义验证特性(Custom Validation Attribute)

    这是我们在实际ASP.NET Core项目中用到的,验证用户名中是否包含空格. 开始是这么实现的(继承ValidationAttribute,重写IsValid方法): public class No ...

  8. ASP.NET MVC中使用FluentValidation验证实体

    1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...

  9. ASP.NET MVC中使用FluentValidation验证实体(转载)

    1.FluentValidation介绍 FluentValidation是与ASP.NET DataAnnotataion Attribute验证实体不同的数据验证组件,提供了将实体与验证分离开来的 ...

随机推荐

  1. [codewars_python]Sum of Digits / Digital Root

    Instructions In this kata, you must create a digital root function. A digital root is the recursive ...

  2. web安全:防范点击劫持的两种方式

    防范点击劫持的两种方式 什么点击劫持?最常见的是恶意网站使用 <iframe> 标签把我方的一些含有重要信息类如交易的网页嵌入进去,然后把 iframe 设置透明,用定位的手段的把一些引诱 ...

  3. Objective-C(十九、通知-消息发送模式之中的一个)——iOS开发基础

    结合之前的学习笔记以及參考<Objective-C编程全解(第三版)>,对Objective-C知识点进行梳理总结. 知识点一直在变.仅仅是作为參考.以苹果官方文档为准~ 十九.通知-消息 ...

  4. ognl.OgnlException: target is null for setProperty(null,&quot;XXXX&quot;...)

    今天遇到了这个奇葩问题,最后来回比对了一下前辈写过的一段完整代码后才发现问题. Error大概描写叙述为: 警告: Error setting expression 'XXX' with value ...

  5. 【剑指Offer学习】【面试题27:二叉搜索树与双向链表】

    题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表.要求不能创建不论什么新的结点.仅仅能调整树中结点指针的指向. 比方输入图4.12 中左边的二叉搜索树,则输出转换之后的排序现向链表. ...

  6. 【java】itoo项目实战之大数据查询之使用 new map 优化hibernate之级联查询

    在我的上一篇博客<[java]itoo项目实战之hibernate 懒载入优化性能>中,我曾提到过学生数据有2万条,查询数据十分的慢,这是让人非常受不了的事情.看着页面进度条一直转着圈圈, ...

  7. jQuery对表格进行类样式

    <%-- <%@ page language="java" contentType="text/html; charset=utf-8" pageE ...

  8. 7.Emmet----HTML以及CSS的缩写请查看

  9. 关于EM的理解

    任意浏览器的默认字体高度16px(16像素). 所有未经调整的浏览器都符合: 1em=16px.那么12px=0.75em,10px=0.625em.为了简化font-size的换算,需要在css中的 ...

  10. 项目: 更新(二) python 实现大概FTP的功能

    服务器利用 socketserver 模块 构造, 实现了 多进程. 客户端仍然利用的是底层的 socket模块. 只不过进行了更深度的 解耦, 新加或者删除 某些功能 更方便 在上一个版本的基础上, ...