最近有项目需要使用.net的web,啥也不说,直接开始学习.net的mvc框架。感觉微软的web项目其实还是很好用的,今天和大家分享一下服务端验证的事情。其实原理就是用到了c#的特性,特性不用多说,大家都应该很清楚,也是一个类,标记了特性的类或者方法,就可以是用特性类的数据,并且打上了一个特殊的标记,以方便我们进行区分从而进行调用。

话不多说,直接开始!

第一步:自定义特性类

public class CustomAttribute : ValidationAttribute
{
public Int32 age { get; set; }
public CustomAttribute(int age)
{
this.age = age;
}
//这里的value参数来源于字段值
public override bool IsValid(object value)
{
if ((Int32)value < this.age)
return false;
else
return true;
} //这里的name参数来源于ErrorMessage
public override string FormatErrorMessage(string name)
{
return name+"必须大于20";
}
}

继承于ValidationAttribute,并且主要是重写IsValid和FormatErrorMessage。

第二步:定义model,并且添加特性

public class People
{
[Display(Name = "姓名")]
public string name{get;set;} [Display(Name = "年龄")]
[Custom(,ErrorMessage ="年龄")]
public int? age { get; set; }
}

第三步:前端代码,前端借用了HTML的封装方法快速生成字段,注意这里需要在css中设置field-validation-error的颜色,否则提示不明显

@using MiniWeb.Models
@model People
@{
ViewBag.Title = "addPeople";
}
<style type="text/css">
.field-validation-error {
color:red;
}
</style> <div class="container">
<h2>addPeople</h2> <form action="doAdd" method="post">
@using (Html.BeginForm())
{
@Html.EditorForModel()
<input type="submit" value="提交" />
}
</form>
</div>

第四步:action的代码,通过内置属性ModelState.IsValid来判断是否通过验证

public ActionResult doAdd(People p)
{
if (!ModelState.IsValid)
{
return View("addPeople");
}
return Content("成功");
}

至此完毕!总结一下整个过程,当前端调用action的时候,后台默认都会检查model对象是否定义了特性验证,正是因为这个原因才会最终进入验证判断。验证的详细结果在前台我们通过@HTML.ValidationMessageFor可以获取。本实例中@Html.EditorForModel()已经把ValidationMessageFor封装进去了。通过本例我们可以看到,微软封装的强大和服务端验证的实际后台逻辑到底是如何实现的!

ASP.NET的服务端验证(干货)的更多相关文章

  1. Asp.net MVC 服务端验证多语言错误

    服务端验证用户提交信息时为了实现多语言使用了资源文件,如: using System.ComponentModel.DataAnnotations; public class UserModel { ...

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

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

  3. .net使用FluentValidation进行服务端验证。

          背景 最近使用asp.mvc 做一个在线口语系统项目,在服务端验证问题遇到了一些小问题. 自己根据数据库表user定义一个数据库表实体对象UserDbEntity [Table(" ...

  4. asp.net获取服务端和客户端信息

    asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...

  5. (转)客户端触发Asp.net中服务端控件事件

    第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ...

  6. JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践

    任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...

  7. C#在服务端验证客户端证书(Certificate)

    使用https协议进行通讯的时候可以设置双向证书认证,客户端验证服务端证书的方法前面已经介绍过了,现在说一下在服务端验证客户端证书的方案. 这里给出的方案比较简单,只需要在Service端的配置文件中 ...

  8. Vue.js与 ASP.NET Core 服务端渲染功能整合

    http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...

  9. Easyui validatebox后台服务端验证

    Easyui validatebox的验证提示十分好用,可是在实际项目的运用中,经常会遇到需要服务器验证后并返回验证结果信息,比如验证用户名.手机号.邮箱是否已存在.于是就想着怎么拓展Easyui的验 ...

随机推荐

  1. 《C++ Primer Plus》读书笔记之五—函数-C++的编程模块

    函数-C++的编程模块   1.C++对于返回值的类型有一定的限制:不能是数组,但可以是其他任何类型——整数.浮点数.指针,甚至可以是结构和对象(有趣的是,虽然C++函数不能直接返回数组,但可以将数组 ...

  2. 如何去掉android的标题栏

    利用eclipse创建一个android工程向导后默认的会给app加上一个标题栏,如下图如何去掉红色的标题栏呢?从网上找的有下面的几种方法.1.通过代码去掉在Activity的onCreate中加入如 ...

  3. Scala模式匹配和样例类

    Scala有一个十分强大的模式匹配机制,可以应用到很多场合:如switch语句.类型检查等.并且Scala还提供了样例类,对模式匹配进行了优化,可以快速进行匹配. 1.字符匹配     def mai ...

  4. struts2面试整理

    struts2的工作原理 客户端发送请求 经过一系列的过滤器 FilterDispatcher通过ActionMapper来决定这个REquest需要调用的Action FilterDispather ...

  5. Server Host Cannot be null解决方法

    在用打开Services Directory application 或者访问 某个已发布的地图服务时,出现"Server Host Cannot be null"的错误. 问题的 ...

  6. Java基础知识强化之集合框架笔记78:ConcurrentHashMap之 ConcurrentHashMap、Hashtable、HashMap、TreeMap区别

    1. Hashtable: (1)是一个包含单向链的二维数组,table数组中是Entry<K,V>存储,entry对象: (2)放入的value不能为空: (3)线程安全的,所有方法均用 ...

  7. 5、Web Service-整合CXF

    1.工程准备 继续使用之前的服务端:https://www.cnblogs.com/Mrchengs/p/10562458.html 2.jar准备 前去apache官网下载响应的jar:http:/ ...

  8. VIM在Win7上的安装教程

    1.下载 目前VIM在其官网上的最新版本为7.4,Windows版本名称为GVIM,在百度软件中可以下载GVIM的最新版本,建议 在百度上下载,因为比较快.在百度上搜索"GVIM" ...

  9. array详解

    array和vector大致是相同的,区别在于array的大小是固定的.不能增加和缩小.另外array的swap()函数和vector的swap()函数在算法复杂度上是有区别的,array.swap( ...

  10. SVN篇

    启动SVN : svnserve -d -r svn 查看进程: ps -ef | grep svmserve -------------------------------------------- ...