ASP.NET的服务端验证(干货)
最近有项目需要使用.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的服务端验证(干货)的更多相关文章
- Asp.net MVC 服务端验证多语言错误
服务端验证用户提交信息时为了实现多语言使用了资源文件,如: using System.ComponentModel.DataAnnotations; public class UserModel { ...
- ASP.NET MVC如何实现自定义验证(服务端验证+客户端验证)
ASP.NET MVC通过Model验证帮助我们很容易的实现对数据的验证,在默认的情况下,基于ValidationAttribute的声明是验证被使用,我们只需 要将相应的ValidationAttr ...
- .net使用FluentValidation进行服务端验证。
背景 最近使用asp.mvc 做一个在线口语系统项目,在服务端验证问题遇到了一些小问题. 自己根据数据库表user定义一个数据库表实体对象UserDbEntity [Table(" ...
- asp.net获取服务端和客户端信息
asp.net获取服务端和客户端信息 获取服务器名:Page.Server.ManchineName获取用户信息:Page.User 获取客户端电脑名:Page.Request.UserHostNam ...
- (转)客户端触发Asp.net中服务端控件事件
第一章. Asp.net中服务端控件事件是如何触发的 Asp.net 中在客户端触发服务端事件分为两种情况: 一. WebControls中的Button 和HtmlControls中的Type为su ...
- JSR-303 Bean Validation 介绍及 Spring MVC 服务端验证最佳实践
任何时候,当要处理一个应用程序的业务逻辑,数据校验是你必须要考虑和面对的事情. 应用程序必须通过某种手段来确保输入参数在上下文来说是正确的. 分层的应用在很多时候,同样的数据验证逻辑会出现在不同的层, ...
- C#在服务端验证客户端证书(Certificate)
使用https协议进行通讯的时候可以设置双向证书认证,客户端验证服务端证书的方法前面已经介绍过了,现在说一下在服务端验证客户端证书的方案. 这里给出的方案比较简单,只需要在Service端的配置文件中 ...
- Vue.js与 ASP.NET Core 服务端渲染功能整合
http://mgyongyosi.com/2016/Vuejs-server-side-rendering-with-aspnet-core/ 原作者:Mihály Gyöngyösi 译者:oop ...
- Easyui validatebox后台服务端验证
Easyui validatebox的验证提示十分好用,可是在实际项目的运用中,经常会遇到需要服务器验证后并返回验证结果信息,比如验证用户名.手机号.邮箱是否已存在.于是就想着怎么拓展Easyui的验 ...
随机推荐
- Compare DML To Both REDO And UNDO Size
SUMMARY you can remember undo rule the same to redo if you want demo rule that you can look up the ...
- python 中logging的日志封装
因为最近在做平台,发现有同事,使用django封装了日志模块,看样子很简单,准备自己单独做了一个日志封装模板,对于python不熟练的我,封装部分参考了多个博主的内容,形成自己的日志模块,内容如下: ...
- 快速搭建redis单机版和redis集群版
单机版 第一步:需要安装redis所需的C语言环境,若虚拟机联网,则执行 yum install gcc-c++ 第二步:redis的源码包上传到linux系统 第三步:解压缩redis tar ...
- [19/04/16-星期二] 注解机制(Annotation,区别于comment(传统意义上的注释))
一.概念 作用: ——不是程序本身,可以对程序作出解释.(这一点和注释没什么区别) ——可以被其它程序(比如编译器)读取,这是区别于注释的最重要的一点. 格式: ——"@注释名" ...
- 【Webpack】学习随笔
参考链接:http://www.runoob.com/w3cnote/webpack-tutorial.html Webpack 是一个前端资源加载/打包工具. Webpack 可以将多种静态资源 j ...
- 20165302 学习基础和C语言基础调查
学习基础和C语言基础调查 ====== 一,技能学习经验体会 要问我有什么技能比大多数人强,这个我还真的不敢说,虽然我在很多方面都有自己的一些了解,比如乐器和绘画,但也都是一知半解,并没有在某一方面出 ...
- jmeter接口测试1-参数化
jmeter一个简单的接口测试例子 1.创建一个http请求: 大概的步骤就是: (1)创建一个线程组 (2)添加HTTP信息头管理器:右键线程组,选择,添加user-Agent,key-value形 ...
- 小程序采坑之setData
根据双向绑定当我setData的时候input的值应该改变,但是并没有.而且this.data中的值也没有改变 <input class="weui-input" bindi ...
- ASP.NET如何批量保存动态生成的文本框?
对于OA系统,表单签核功能必不可少.而根据公司的情况,表单自然又五花八门,所以就要求能够让用户自己建立表单并设定表单的流程.填写内容等等.我之前写过一篇文章[地址:pivot的用法(SQL SERVE ...
- Linux 带宽、CPU、内存占用情况
iftop 查看带宽占用情况(总)yum install -y iftop 安装iftopnethogs 查看进程流量 curl http://218.5.73.233:8060/ip.php 查看出 ...